Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Como usar filtros en el componente IBDataSet (https://www.clubdelphi.com/foros/showthread.php?t=87363)

Minoru 20-12-2014 01:24:43

Como usar filtros en el componente IBDataSet
 
Ya borre todo lo que tenia en SQLDB y cree todo al IBX FIREBIRD

Codigo IBX FIREBIRD:
https://www.dropbox.com/s/z1gv3b0107...er1.4.rar?dl=0

ya solucione el error del memo, vincule los datos al form2, ya cree el reporte.
ya guarda los datos cuando edito con el DBNavigator. (Que por una extraña razón con el SQLDB no podía , solo moverme por los ítem y no editar.
motivo de mi post) veo que con IBX si puedo...

pero tengo el siguiente problema. que no logro hacer el filtro con IBX


ecfisa 20-12-2014 08:51:01

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 :)

Casimiro Notevi 20-12-2014 09:40:24

Ahora toca el tutorial de SQL


La franja horaria es GMT +2. Ahora son las 12:35:15.

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