hola
yo para este tipo de consultas con filtros estáticos utilizo una estructura fija de SELECT (sin necesidad de cambiar o ajustar el SQL en runtime) como esta:
Código SQL
[-]
SELECT MARCA,CODIGO,FORMULA,NUMERO,DESCRI,CODIGOI
FROM INVENTA
WHERE
(:minLargo is null or :minLargo <= m1) and
(:maxLargo is null or m1 <= :maxLargo ) and
(:minAncho is null or :minAncho <= m2) and
(:maxAncho is null or m2 <= :maxAncho ) and
(:minAlto is null or :minAlto <= m4) and
(:maxAlto is null or m4 <= :maxAlto )
-- and -- resto de opciones --
y los parámetros los cargo de la siguiente forma:
Código Delphi
[-]
procedure TForm2.FILTROPBeforeOpen(DataSet: TDataSet);
procedure SetParamsAsInt(AParam: TParam; AEdit: TEdit);
var
AValue:integer;
begin
if (AEdit.Text = '') or not TryStrToInt(AEdit.text, AValue) then
AParam.Clear
else
AParam.AsInteger:=AValue;
end;
begin
with filtroP, Params do begin
SetParamsAsCurr(ParamByName('minLargo'), Edit1);
SetParamsAsCurr(ParamByName('maxLargo'), Edit2);
SetParamsAsInt(ParamByName('minAncho'), Edit3);
SetParamsAsInt(ParamByName('maxAncho'), Edit4);
SetParamsAsInt(ParamByName('minAlto'), Edit5);
SetParamsAsInt(ParamByName('maxAlto'), Edit6);
end;
end;
De tal forma que si el usuario no rellena alguno de los campos de busqueda, ese campo se queda sin efecto