Si vas a buscar por muchos parámetros, yo construiría varias funciones para no complicar mucho el código:
Código Delphi
[-]
procedure SqlPrincipal;
begin
query1.Sql.Text := 'Select * from tabla WHERE '+
casa_comercial;
end;
function casa_comercial:string;
var tmp:string;
begin
if editcasaComercial.text = EmptyStr then
result := emptyStr ; else
result := ' casa_comercial = ' + quotedStr(editcasaComercial.text);
tmp := orden_compra;
if tmp <> emptystr then
result := result + ' and ' + tmp;
tmp := carta_orden;
if tmp <> emptystr then
result := result + ' and ' + tmp;
end;
end;
function orden_compra:
begin
if editOrdenCompra.text = emptystr then
result := emptystr
else
result := ' orden_compra = '+ quotedStr(editOrdencompra.Text);
end;
function carta_orden:
begin
if editCartaOrden.text = emptystr then
result := emptystr
else
result := ' carta_orden = '+ quotedStr(editCartaOrden.Text);
end;
Vamos el famoso "divide y vencerás". Cada función se encarga de una pequeña parte (cada condición) y despues devuelve el string con el SQL que corresponde con esa condición.
En este caso es mejor no usar parámetros (parambyname), los parámetros no aportará mejora alguna, porque de una ejecución a otra varía la SQL y con ello el número de parámetros.
Antes de hacer un Query1.Open, haz un Memo1.Lines.Add(query1.Sql.Text) para ver que toda la SQL está correcta, los apostrofes, las uniones con "and" y "or", los espacios en blanco, etc. Así no te mareas mucho
Saludos.