Hola Minoru.
El
TIBDataSet no modifica de forma automática la cadena SQL al activar la propiedad
Filtered como lo hace el
TIBTable. Y la propiedad
Filter sólo aparece en este componente por derivar de
TDataSet y estar publicada en este último, en resumen: en el
TIBDataSet no funciona. (No sé si esto habrá cambiado en versiones posteriores o en la de Lazarus).
La alternativa es usar el evento
OnFilterRecord por ejemplo:
Código Delphi
[-]
procedure TForm1.IBDataSet1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:= IBDataSet1.FieldByName(EditCampo.Text).AsString = EditFiltro.Text;
end;
procedure TForm1.btnFiltrarClick(Sender: TObject);
begin
IBDataSet1.Filtered:= not IBDataSet1.Filtered;
end;
De todos modos el uso de filtros provoca un alto tráfico de red y degradación del rendimiento, siempre es preferible filtrar por la cláusula
WHERE en la sentencia SQL, ejemplo:
Código Delphi
[-]
...
implementation
const
ORIG_CONS = 'SELECT * FROM TU_TABLA';
procedure ShowByField(aDataSet: TIBDataSet; const Campo, Filtro: string);
begin
with aDataSet do
begin
Close;
SelectSQL.Clear;
SelectSQL.Add(ORIG_CONS);
SelectSQL.Add('WHERE '+ Campo +' = :PARAM');
ParamByName('PARAM').AsString:= Filtro;
Open;
end;
end;
procedure TForm1.btnFiltrarClick(Sender: TObject);
begin
ShowByField(IBDataSet1,EditCampo.Text, EditFiltro.Text);
btnFiltrar.Enabled:= False;
end;
procedure TForm1.btnQuitarFiltroClick(Sender: TObject);
begin
IBDataSet1.Close;
IBDataSet1.SelectSQL.Text:= ORIG_CONS;
IBDataSet1.Open;
btnFiltrar.Enabled:= True;
end;
Nota: Te preguntarás por que moví tu mensaje del hilo anterior creando uno nuevo... Es debido a que una pregunta que no tiene relación con la consulta inicial hay que ponerla en un nuevo hilo, por favor la próxima vez hazlo así
Saludos