Ver Mensaje Individual
  #5  
Antiguo 22-10-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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
Responder Con Cita