Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 20-12-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Como usar el componente IbEvents? MartinS OOP 11 07-05-2012 16:25:07
como usar el componente lblmarquee gaston260 API de Windows 0 25-08-2010 02:21:43
Usar filtros por mas de un campo con applyranges zugazua2001 Varios 1 26-06-2007 15:20:58
como usar un ibdataset en dos forms distintas.... uper Firebird e Interbase 3 02-08-2005 19:45:23
¿como usar un componente? mrmanuel OOP 3 12-05-2003 22:12:36


La franja horaria es GMT +2. Ahora son las 18:09:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi