Ver Mensaje Individual
  #8  
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
Cita:
Empezado por mamcx Ver Mensaje
Cierto, SQL es un lenguaje que no esta hecho para programar en el, sino para usarlo de forma "ad-hoc", lo cual es desafortunado, porque el modelo relacional no es tan limitado.

Como hacer eso no es tan dificil, despues de todo. Quien pone el WHERE? Lo mismo de quien pone todo lo demas, manualmente: El SQL no se puede modificar, solo re-crear desde zero una y otra vez.

Hacer un codigo que genere el SQL de forma generica puede ser un poco molesto y repetitivo, pero para el caso en particular de este hilo es muy simple: Si hay que filtrar por "op" es solo agregar " WHERE datos.id_operador = ?" y ya.
No es tan sencillo. Si tenes multiples parametros de filtro la cosa se complica. Usando el codigo de ejemplo de mi anterior post, que pasa ante esta llamada:

Buscar('Juan', '', [pgCasado])

el SQL va quedando asi:

Código Delphi [-]
SELECT Campos
FROM Tablas [JOIN de ser necesarios]
WHERE

Primero pregunta por Apellido, como mande nada, sige
Despues pregunta por Nombre, como mande Juan, agrega la sentencia SQL y el parametro
Despues hace lo del grupo, como le pedi los Casados, agrega la sentencia, pero me falta un AND en el medio, quien lo pone?

Si lo pongo despues de poner "Juan", como me aseguro que despues alguien va a poner algo despues de mi AND?

Y si antes de agregar lo del grupo, pongo un AND, como me aseguro que antes habia una condicion?

Yo lo termine solucionando a lo bestia, poniendo siempre el AND (u OR) al final, y despues sacandoselo a la ultima linea. A lo bestia si, pero hacer algo generico como decis vos, es bastante molesto

En un mundo feliz, habria que implementar alguna clase que opere estilo LINQ, y vaya armando el SQL solita, masomenos asi:

Código Delphi [-]
SQL := Select(Campos).From(Tabla).Where(Condicion1).And(Condicion2).Or(Condicion3).Order(..)

Eso si, despues te regalo los join, las funciones agregadas, los group by, etc
Responder Con Cita