OK
el filtro recursivo para ibDataset/MDOdataset, (no tablas).
Lepe distes en el clavo despues de muchos cambios y adaptar la linea del filtro como hizo
Neomanar en otro post.
¡¡¡¡Funciono por fin!!!. Debo reconocer que soy algo cabezona y las fechas en firebird no las domino, estoy empezando.
Muchas gracias por lo que me habeis enseñado.
Kia
Para quien le pueda interesar lo posteo:
Código Delphi
[-]
procedure TV_equipo.Filtrar(Sender: TObject);
const
TiposConComillas:set of TfieldType
=[ftstring, ftdate, fttime,ftdatetime];
var
Campo, Operador, Valor, sino:string;
I:integer;
begin
sino:='';
if sender= migual then
operador:='='
else if sender= mMayorigual then
operador:='>='
else if sender= mMenorigual then
operador:='<='
else
operador:='<>';
Campo:=Rxdbgrid1.SelectedField.FieldName;
if rxdbgrid1.SelectedField.DataType in TiposconComillas then
BEGIN
if rxdbgrid1.SelectedField.DataType=ftdate then begin
valor:=Rxdbgrid1.SelectedField.AsString;
valor:=QuotedStr(FormatDateTime('yyyy/mm/dd',strtodate(valor)));
end else begin
valor:=quotedstr(Rxdbgrid1.SelectedField.AsString); end;
if (Rxdbgrid1.SelectedField.IsNull) and(rxdbgrid1.SelectedField.DataType<>ftdate)then
begin
valor :='is null'; if operador<>'=' then sino:='NOT ';
operador:='';
end ;
END ELSE BEGIN
valor:=Rxdbgrid1.SelectedField.AsString ;
for I := 1 to length(valor) do
if valor[i]=DecimalSeparator then Valor[i]:='.';
END ;
if mActivarfiltro.Checked=false then BEGIN
with DMDatos.Dsetequipos do
begin
Close;
SelectSQL.Clear;
SelectSQL.Add('SELECT * FROM equipo');
SelectSQL.add('WHERE '+sino+ format('%s %s %s',[Campo,Operador,Valor]));
SelectSQL.Add('ORDER BY '+campo);
Open;
end;
END ELSE BEGIN
with DMDatos.Dsetequipos do begin
Close;
for I := SelectSQL.Count -1 downto 0 do
if pos('ORDER BY',uppercase(SelectSQL[i])) <>0 then
SelectSQL.Delete(i);
SelectSQL.add ('AND '+sino+ format('%s %s %s',[Campo,Operador, Valor]));
SelectSQL.Add('ORDER BY '+Campo);
open;
end;
END;
mactivarfiltro.Checked:=true;
DMDatos.Dsetequipos.Last;
label1.Caption:=inttostr(DMDatos.Dsetequipos.RecordCount); end;