Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   Nuevamente renegando con ClientDataSet, filter y LIKE... (https://www.clubdelphi.com/foros/showthread.php?t=81655)

Walterio 04-12-2012 15:14:43

Nuevamente renegando con ClientDataSet, filter y LIKE...
 
Hola a todos.
Estoy usando Delphi 6 con MYSql, TADOQuery, DataSetProvider y ClientDataSet.
No llego a entender el porqué de que si creo un filtro que contiene "LIKE" y se lo aplico al CLientDataSet, éste no funciona, es decir, lo ignora y me muestra los datos como si no le hubiera aplicado ningún filtro.
El código que utilizo es :

Código Delphi [-]
//Construcción del filtro :
cdsClientDataSet.Filtered := False;
cdsClientDataSet.Filter := '';
sFiltroCampo := '(' + oField.FieldName + ' LIKE ' + QuotedSTR('%'+TFrameFiltroString(Components[i]).txtCadena.text+'%') + ')';
cdsClientDataSet.Filter := sFiltroCampo;
cdsClientDataSet.Filtered := True;

Usando otros filtros que no usan el LIKE, funciona perfecto.
Intenté usar el CommandText poniendole una sentencia SQL y directamente no me devuelve nada, queda el clientdataset vacio y sé que la sentencia SQL funciona (ni siquiera un mísero "Select * from tabla" devuelve algo).
En el provider tengo activado el [poAllowCommandText].

Ya no se me cae ninguna idea mas...algun aporte de los genios ?.

Desde ya, muchas gracias.

ecfisa 04-12-2012 22:25:25

Hola Walterio.

Por los componentes que comentas, pienso que no tendrías que tener ningún problema.

Pero en la composición del filtro de tu código hay muchas variables implicadas de las que desconocemos su valor y por tanto como queda conformada la cadena sFiltroCampo.

¿ Probaste mostrar el contenido de sFiltroCampo, para ver el valor que toma ? ¿ Podrías ponerlo en un mensaje ?

Saludos.

ASAPLTDA 05-12-2012 13:54:13

Filtro
 
hola Agregar el first a ver si te sirve


Código Delphi [-]
//Construcción del filtro :
cdsClientDataSet.Filtered := False;
cdsClientDataSet.Filter := '';
sFiltroCampo := '(' + oField.FieldName + ' LIKE ' + QuotedSTR('%'+TFrameFiltroString(Components[i]).txtCadena.text+'%') + ')';
cdsClientDataSet.Filter := sFiltroCampo;
cdsClientDataSet.Filtered := True;
cdsClientDataSet.FIRST  ;   // <--- adicinar linea si no la tiene ya definida

Walterio 05-12-2012 14:28:30

Hola, muchas gracias por las respuestas.
Lo que me extraña es que si lo de los componentes está correcto, porqué no me funciona.
Aclaro que en el ClientDataSet tengo seteadas las opciones de FIlterOptions en [foCaseInsensitive], nada más.

Voy a probar de hacer lo del first, en cuanto a la cadena que se construye para el filtro queda algo asi como :
'NOM017 LIKE '%car%''.
NOM017 es el nombre de uno de los campos involucrados.
Voy a intentar de harcodearlo y ver que pasa.

Código Delphi [-]
//Construcción del filtro :
cdsClientDataSet.Filtered := False;
cdsClientDataSet.Filter := '';
sFiltroCampo := 'NOM017 LIKE '%car%''
cdsClientDataSet.Filter := sFiltroCampo;
cdsClientDataSet.Filtered := True;

Pruebo y comento.

Nuevamente, muchas gracias.

Walterio 05-12-2012 20:21:15

Probé lo del first y no funcionó.
Tambien probé de hacerlo asi :

Código Delphi [-]
//Construcción del filtro :
cdsClientDataSet.Filtered := False;
cdsClientDataSet.Filter := '';
sFiltroCampo := 'NOM017 = 'car*''
cdsClientDataSet.Filter := sFiltroCampo;
cdsClientDataSet.Filtered := True;

Utilizando el comodín '*' al final, me muestra todos los registros que comienzan con lo solicitado en el filtro.
Lo que noté es que si le pongo la palabra LIKE, no funciona, pero si lo cambio por "=" si funciona.
Evidentemente hay algo en mi Delphi que no me permite filtrar con LIKE.

La misma rutina la tengo hecha en otro programa pero que no usa providers ni adoquery, usa tablas dbf que llenan el clientdataset "a mano" y aqui si funciona perfecto el LIKE...

No entiendo...juro que no entiendo...:confused:


La franja horaria es GMT +2. Ahora son las 00:01:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi