Yo estas cosas suelo hacerlas asi:
Código Delphi
[-]
var
bOtraCondicion:=boolean;
begin
bOtraCondicion:=false;
with ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add('SELECT APELLIDO, NOMBRE, DNI FROM CLIENTES');
if ( (Edit1.Text <>'') and (Edit2.Text <>'') (Edit3.Text <>'') ) then
begin
SQL.Add('WHERE');
if Edit1.Text <>'' then
begin
SQL.Add('APELLIDO LIKE :PAPE ');
bOtraCondicion:= true;
Parameters.ParamByName('PAPE').Value:= '%'+Edit1.Text+'%';
end;
if Edit2.Text <>'' then
begin
if bOtraCondicion then
SQL.Add('AND');
SQL.Add('NOMBRE LIKE :PNOM');
bOtraCondicion:= true;
Parameters.ParamByName('PNOM').Value:= '%'+Edit2.Text+'%';
end;
if Edit3.Text <>'' then
begin
if bOtraCondicion then
SQL.Add('AND');
SQL.Add('DNI LIKE :PDNI');
Parameters.ParamByName('PDNI').Value:= '%'+Edit3.Text+'%';
end;
end;
Open;
end;
end;