Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema con Filter y campo boolean (https://www.clubdelphi.com/foros/showthread.php?t=78431)

ElDioni 19-04-2012 09:55:26

Problema con Filter y campo boolean
 
Hola a todos,

tengo un problema que no logro comprender porque creo que es lo más sencillo del mundo pero no me funciona como quiero.

Tengo un ClientDataSet que está enganchado a un DataSetProvider y este a un AdoQuery, en el ClientDataSet quiero filtrar por el valor True de un campo Boolean, entonces pongo en el código lo siguiente:

Código Delphi [-]
ClientDataSet1.Filtered:=false;
ClientDataSet1.Filter:='Principal=True';
ClientDataSet1.Filtered:=True;

Pero no me devuelve ningún valor, ahora mismo la tabla tiene todos los registros a true menos uno, si en lugar de poner el filtro con true lo pongo con false me sale el único que registro que tengo en False, al revés me debería sacar todos los demás, ¿no?. No se me ocurre que puede estar pasando, si alguien sabe que puede ser agradecería la ayuda.

Por cierto, la base de datos esta en access, por si sirve de algo.

Saludos.

ElDioni 19-04-2012 10:03:36

Hola de nuevo,

estoy haciendo pruebas y me encuentro con que si hago el filter directamente en el AdoQuery y luego activo el ClientDataSet entonces si me hace el filtro correctamente. Solo falla cuando hago el filter directamente en el Client.

Saludos.

ElDioni 19-04-2012 11:06:18

Hola,

sigo haciendo pruebas y me encuentro con que si lo que pongo en filter es:

Código Delphi [-]
ClientDataSet1.Filter:='Not principal=False';

entonces si funciona :confused::confused::confused:, no se que les parece el asunto, a mi un poco raro.

Saludos.

ecfisa 19-04-2012 15:46:47

Hola ElDioni.

Fijate de este modo:
Código Delphi [-]
var
  Value: Boolean;

procedure TForm1.btnFiltroClick(Sender: TObject);
begin
  with ClientDataSet1 do
  begin
    Filtered:= False;
    Value:= not Value;
    Filter:= 'Principal = ' + IntToStr(Integer(Value));
    Filtered:= True;
  end;
end;
En las pruebas funciona correctamente, mostrando alternativamente los campos verdaderos y falsos.

Saludos.

ElDioni 19-04-2012 16:45:43

Hola ecfisa, gracias por tu tiempo.

He estado probando lo que me propones pero me ocurre lo mismo que poniendo directamente escrita la consulta en el filtro (Filter:='Principal=true';), cuando el valor es false me saca el registro correctamente pero para true no, no se porque ocurre, de momento lo tengo solucionado con lo que comentaba antes:

Código Delphi [-]
ClientDataSet1.Filter:='Not principal=False';
Pero que me parece extrañísimo el comportamiento.

Seguiré mirando a ver que puede ser, y si puedes arrojar algo de luz al asunto te lo agradezco.

Saludos.

ecfisa 19-04-2012 16:56:02

Hola.

Si es realmente extraño...

Te hago unas consultas, ¿ Con que bd estas trabajando y de que tipo es el campo 'principal' ?

Saludos.

ElDioni 19-04-2012 17:08:25

Te comento, sera mejor que te sientes antes de leer esto, las bases de datos están hechas en access 97, el campo Principal es un campo Si/No (boolean), yo creo que en alguna ocasión he realizado este tipo de acciones, no con esta tabla que es nueva, pero si con otras tablas y no he tenido este tipo de problemas, si hago la una consulta sencilla en access funciona bien, si lo hago desde el adoquery1 del que coge los datos el clientdataset lo hace bien, solo falla cuando lo hago desde el client, pero que si funciona si lo hago con el "not principal=false", stranger in the night.

Saludos.


La franja horaria es GMT +2. Ahora son las 10:11:42.

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