Ver Mensaje Individual
  #2  
Antiguo 20-12-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 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 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;

// Activar/desactivar filtro
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

// Consulta inicial
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;

// Fijar filtro
procedure TForm1.btnFiltrarClick(Sender: TObject);
begin
  ShowByField(IBDataSet1,EditCampo.Text, EditFiltro.Text);
  btnFiltrar.Enabled:= False;
end;

// Quitar filtro
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita