Prueba esto:
Código Delphi
[-]
var
Criteria: TStringList;
Where: String;
begin
Criteria := TStringList.Create;
Criteria.Delimiter := '&';
Criteria.QuoteChar := ' ';
Criteria.Values['cif'] := QuotedStr(Edit1.Text);
Criteria.Values['empresa'] := QuotedStr(Edit2.Text);
Criteria.Values['articulo'] := QuotedStr(Edit3.Text);
Criteria.Values['precio'] := QuotedStr(Edit4.Text);
Where := StringReplace(Criteria.DelimitedText, '&', ' and ', [rfReplaceAll]);
Criteria.Free;
end;
Si la cadena Where está vacía es que no se llenó ningún campo. En caso contrario ya nada más agregas la cadena
'WHERE ' + Where
al resto de tu consulta.
Nota Fallará si el caracter & se encuentra en alguno de los campos.
// Saludos