PDA

Ver la Versión Completa : Como usar filtros en el componente IBDataSet


Minoru
20-12-2014, 01:24:43
Ya borre todo lo que tenia en SQLDB y cree todo al IBX FIREBIRD

Codigo IBX FIREBIRD:
https://www.dropbox.com/s/z1gv3b0107llgmd/Enviar-ver1.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

http://sia1.subirimagenes.net/img/2014/12/20/141220011524680958.png

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:

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:

...
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 (http://www.w3resource.com/sql/tutorials.php)