Ver Mensaje Individual
  #6  
Antiguo 23-04-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Reputación: 21
gatosoft Va camino a la fama
Cita:
Empezado por Al González Ver Mensaje
Código Delphi [-]
CDS.Filter := CDS.Filter + ' and ...';
Por cierto, intenta evitar el uso de With. Es como Facebook: en principio parece algo bueno, pero es el mismísimo Diablo.
Saludos.
De acuerdo con Al. el código debería ser algo como:


Código Delphi [-]
Filtered:=False;        
Filter:='';          
if form3.ENOMBRE.Text<>'' then
   Filter:= Filter +Ifthen(Filter='','',' and ')+'nombre like '+QuotedStr('%' + Form3.ENOMBRE.Text+'%');            
   
if Form3.DBLCBCATEGORIA.KeyValue<>null then
   Filter:= Filter +Ifthen(Filter='','',' and ')+'idcategoria=' + IntToStr( form3.DBLCBCATEGORIA.KeyValue) ; 
   
 if Form3.DBLCBMARCA.KeyValue<>null then
   Filter:= Filter +Ifthen(Filter='','',' and ')+'idmarca='+ Inttostr(Form3.DBLCBMARCA.KeyValue);
Filtered:=True;

La función Ifthen la encuentras en: StrUtils, si el resultado es texto y en Math si el resultado es numérico (!!??)

Existe otra alternativay es programar el evento OnFilterRecord del Dataste. Ésta se utiliza cuando la condición es mas complicada, por ejemplo:

Código Delphi [-]
procedure DTM.QueryFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
 Accept:= (CumpleCondicion1(Parametros) and (Random(100) > 50) ) or (Nombre<>'');
end;
y el código para filtrar sería:

Código Delphi [-]
CDS.Filtered:= False;
CDS.Filtered:= True; //aquí dispara el evento
Responder Con Cita