Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Providers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-12-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 04-12-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 05-12-2012
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 05-12-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 05-12-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
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...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Nuevamente Delphius llega a los 1000 Bicho La Taberna 33 16-08-2007 22:03:11
Autonumerico nuevamente jzginez Firebird e Interbase 3 27-11-2006 17:45:37
Nuevamente.... Servidor a Cliente INDY 10 m@kio Internet 1 18-08-2005 18:34:56
nuevamente marianaf Varios 3 29-11-2003 05:45:53
Nuevamente, como hago con el BDE? emeceuy Conexión con bases de datos 6 20-07-2003 15:38:57


La franja horaria es GMT +2. Ahora son las 07:17:04.


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
Copyright 1996-2007 Club Delphi