Ver Mensaje Individual
  #3  
Antiguo 07-06-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
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
Responder Con Cita