Problemas con LIKE

291 views
Skip to first unread message

manuel medina

unread,
Aug 8, 2025, 4:33:55 PM8/8/25
to Comunidad de Visual Foxpro en Español
Saludos
Estoy luchando con esto a ver si por favor pueden ayudarme:
Usando mysql desde vfp9

abuscar = ALLTRIM(thisform.buscar.value)

SQLEXEC(conec,"select descrip,precio1 from articulos WHERE descrip like '%?abuscar%'","lista")
SELECT lista
BROWSE
RETURN 

Cuando lo hago escribiendo lo que deseo buscar funciona pero con la variable no funciona.

ESTE FUNCIONA BIEN
SQLEXEC(conec,"select descrip,precio1 from articulos WHERE descrip like '%ACEITE%'","lista")
SELECT lista
BROWSE
RETURN 

Gracias mil.


Hendell Mora

unread,
Aug 8, 2025, 4:45:05 PM8/8/25
to publice...@googlegroups.com
SQLEXEC(conec, "SELECT descrip, precio1 FROM articulos WHERE descrip LIKE '%" + abuscar + "%'", "lista")

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/publicesvfoxpro/fbc58c2a-3871-4afc-989a-4e4d7be98e19n%40googlegroups.com.
Message has been deleted

integral

unread,
Aug 10, 2025, 12:43:33 AM8/10/25
to Comunidad de Visual Foxpro en Español
Buenas Noches

En mi caso utilizo SQL Server 2019

Aqui un ejemplo :

_cStatus = "CANCELADO"                                                      
SQLEXEC(cn, 'SELECT * FROM dbo.Consumo WHERE status_con = ?_cStatus ORDER BY Registro', 'Cur_Regis_Condi')   

Si deseas hacer una búsqueda de los registros mas próximos.

Aquí otro ejemplo

SELECT ruta_prod, fech_act, registro, desc_gene, prod_name, hora_act, st_act ;
       FROM Cur_Grid_Registro ;
       WHERE LOWER(ALLTRIM(This.Value)) $ LOWER(ALLTRIM(SUBSTR(desc_gene,1,LEN(ALLTRIM(This.Value))))) ;
       INTO CURSOR Cur_ResulPro 

Espero haber respondido a tu consulta.

Atte.,

Integral

manuel medina

unread,
Aug 11, 2025, 6:07:31 PM8/11/25
to Comunidad de Visual Foxpro en Español
Buenas a todos/as
Amigos del foro debo ser sincero y decir que llevo horas y no me funciona este LIKE con tablas nativas de vfp esta todo bien:
SELECT descrip,precio1,codart FROM servicios WHERE ALLTRIM(servicios.descrip) like "%"+ALLTRIM(thisform.codart.value)+"%"  ORDER BY descrip into CURSOR mcser  

Pero de vfp a mysql me esta comiendo vivo
gracias nuevamente

Juan Gonzalez

unread,
Aug 11, 2025, 6:16:47 PM8/11/25
to publice...@googlegroups.com
abuscar = ALLTRIM(thisform.buscar.Value)
criterio = "%" + buscar + "%"
sql = "SELECT descrip, precio1 FROM articulos WHERE descrip LIKE ?criterio"
SQLEXEC(conec, sql, "lista")
SELECT lista
BROWSE
RETURN
prueba con esto

Juan Gonzalez

unread,
Aug 11, 2025, 6:17:56 PM8/11/25
to publice...@googlegroups.com
me informas si funciono

Zarlu

unread,
Aug 11, 2025, 6:22:35 PM8/11/25
to Comunidad de Visual Foxpro en Español
Buenas tardes Medina!

Muestra por favor un poco más de código, sobre todo la cadena de la consulta que estás mandando al motor

Mira estas dos formar, las dos de MySql
lcBuscar="fun"+"%"
SQL=sqlexec(CcontrolConect,"Select id,clave from usuarios Where Clave like ?lcBuscar","Cursor")
? SQL
BROWSE
SQL=sqlexec(CcontrolConect,"Select id,clave from usuarios Where Clave like "+lcBuscar,"Cursor")
? SQL
BROWSE

Suerte
zarlu
Chetumal, Quintana Roo, México
Message has been deleted
Message has been deleted

Víctor Hugo Espínola Domínguez

unread,
Aug 12, 2025, 12:55:41 PM8/12/25
to publice...@googlegroups.com
Trata de codificar por partes pequeñas:

lcBusca =  "%" + ALLTRIM(thisform.codart.value) + "%"
lcSelect = "SELECT descrip, precio1, codart FROM servicios WHERE TRIM(servicios.descrip) LIKE  ?m.lcBusca  ORDER BY descrip"
lnResul =  SqlExec(nConex, lcSelect, "curArt")

nConex tiene el resultado de Sqlstringconnect
 
Saludos,
Víctor.
Lambaré - Paraguay.



Alfonso Ramirez Diaz

unread,
Aug 13, 2025, 8:52:52 AM8/13/25
to Comunidad de Visual Foxpro en Español
Yo utilizo en MySQL algo como:

lcSQL = "SELECT * FROM clientes WHERE CONCAT(nombre,rut) LIKE '%" + m.nombre + "%'"

El CONCAT es opcional y lo utilizo cuando quiero buscar por varios campos una palabra especifica.

Normal por un campo seria:

lcSQL = "SELECT * FROM clientes WHERE nombre LIKE '%" + m.nombre + "%'"

Los simboles de porcentaje deben tener comillas simples al principio y al final algo como '%buscado%' para que funcione sin problemas.

Victor Espina

unread,
Aug 13, 2025, 10:07:02 AM8/13/25
to Comunidad de Visual Foxpro en Español
La forma correcta es:

aBuscar = "%" + ALLT(THISFORM.buscar.value) + "%"

SQLEXEC(conec,"select descrip,precio1 from articulos WHERE descrip like ?abuscar","lista")


Por otro lado, quizas esto te pueda interesar:
https://github.com/vespina/ODBCConnPoolMan


Saludos

Victor Espina

Elides Paredes

unread,
Aug 15, 2025, 9:28:23 PM8/15/25
to Comunidad de Visual Foxpro en Español

Cuando usas la sintaxis ?abuscar, VFP trata de pasar la variable abuscar como un parámetro de forma segura. Sin embargo, el operador LIKE con los comodines (%) no interpreta correctamente el parámetro de esa manera, porque la variable se evalúa fuera de la cadena de texto del SQL.

La solución: Concatenación

La forma más sencilla y común de resolver esto es concatenar el valor de la variable directamente en la cadena SQL.

Así es como debe quedar tu código:

Fragmento de código
abuscar = ALLTRIM(thisform.buscar.value) * --- CONCATENACIÓN CORRECTA SQLEXEC(conec,"select descrip,precio1 from articulos WHERE descrip like '%" + abuscar + "%'","lista") SELECT lista BROWSE RETURN

Explicación:

  • "...": Esta es la cadena de la sentencia SQL.

  • " + abuscar + ": Aquí, el valor de tu variable abuscar se inserta directamente en la cadena, rodeado por los comodines %. Los + se usan para unir las partes de la cadena.

Con este cambio, la sentencia SQL que se envía a MySQL será exactamente la que esperas, por ejemplo: select descrip,precio1 from articulos WHERE descrip like '%ACEITE%'.

Pídele a Gemini que escriba un documento o código que puedes editar

manuel medina

unread,
Aug 16, 2025, 12:03:55 AM8/16/25
to Comunidad de Visual Foxpro en Español
Exito, gracias a todos por sus repetidas ayudas

Victor Espina

unread,
Aug 16, 2025, 10:27:58 PM8/16/25
to Comunidad de Visual Foxpro en Español
Disculpa, pero esto funciona perfectamente:

LOCAL cPista, cFilter
cPista = "Victor"
cFilter = "%" + cPista + "%"

SQLEXEC(nConn, "SELECT * FROM clientes WHERE nombre LIKE ?cFilter", "QRESULT")



Nunca, pero NUNCA, se deben concatenar en una instruccion SQL un valor que venga directo del usuario, pues abres la puerta al SQL Injection.

Saludos

Victor Espina

Juan Gonzalez

unread,
Aug 18, 2025, 4:47:07 PM8/18/25
to publice...@googlegroups.com
asi de simple es

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages