lo del where 1=1 lo hace para ya "tener" un where. No se si me explico
El problema que se enfrentan es siempre el mismo:
Lo que esta entre [] vendria a ser opcional en mi pseudocodigo
Código Delphi
[-]
TPersonGroup = (pgSoltero, pgCasado...etc)
TPersonGroups = set of TPersonGroup;
function Buscar(const Nombre, Apellido: string; const Grupos: TPersonGroups = []): TDataSet;
begin
q := CrearQueryMagicamente;
[1] q.SQL.Text := ' SELECT [Campos] FROM Tabla1 [INNER JOIN Tabla2 (ON T1.Id = T2.IdTabla1)] ';
end;
Llegados al punto [1] si, ejecuto ese SQL, que pasa, me trae "todo". Obvio, no filtra no hay where
Ahora, seria deseable poder hacer esto
Código Delphi
[-]
if Apellido <> EmptyStr then
begin
q.SQL.Add(' Apellido LIKE :Ape ');
q.ParamByName('Ape').AsString := Apellido + ''%'';
end;
if Nombre <> EmptyStr then
begin
q.SQL.Add(' Nombre LIKE :Nom');
q.ParamByName('Nom').AsString := Nombre + ''%'';
end;
if Grupos <> [] then
q.SQL.Add(Format(' Grupo IN (%s)', [SetToCSV(Grupos)]));
Las preguntas del millon:
1. Quien pone el WHERE? si todos los filtros vienen "vacios" entonces si pongo el where la consulta se rompe
2. Quien pone los AND? O los OR?
Ese es basicamente el problema que tiene