Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Crear consulta en run time (https://www.clubdelphi.com/foros/showthread.php?t=41673)

sierraja 22-03-2007 07:55:41

Crear consulta en run time
 
Saludos

He revisado el foro acerca de mi pregunta y no he conseguido algo util. Mi escenario es el siguiente: tengo una tabla en firebird el cual acceso desde delphi 7 con los componentes ibx que trae el delphi. La situacion se me presenta cuando quiero crear una consulta sql en tiempo de ejecucion, es decir, que el usuario indique cuales campo y que tipo de operador quiere para realizar la consulta. Por favor si necesitan mas detalles, con mucho gusto podemos concretarlos. Gracias por su tiempo. ;)

Neftali [Germán.Estévez] 22-03-2007 11:22:41

¿Tienes algun problema concreto?
¿No sabes por donde empezar?
¿Algun error?

Crea una cadena con los camps los valores y los operadores que necesites.

Código Delphi [-]
  // Incial
  SQL := 'Select * from Tabla where';
  // A partir de aquí un recorrido con los campos que haya seleccionado el usuario.
  for...
    SQL := SQL + Campo + Operador + StrValor;


Ten en cuenta que a la cadena StrValor, deberás concatenarle las comillas ('Valor') si el campo es un alfanumérico. Similar con los tipos Fecha...

No es un tema sencillo, ya que tiene mmuchos detalles.
Luego debes tener en cuenta los operadores para concatenar y los posibles paréntesis si hay más de uno diferente.

...F1=A AND F2=B OR F3=C

Como ves es un tema muy amplio; Debería dar detalles y preguntar algo más concreto
Como comenario, decir que hay componentes que te permiten hacer lo que buscas. Aquí tienes algunos.
Comentarte que

Bicho 22-03-2007 11:31:50

Hola,

creo que no entiendo muy bien tú pregunta. ¿Puedes hacer una consulta en un objeto IBX en tiempo de diseño pero no en ejecución?
Para crear una consulta:

Necesitas un objeto TQuery sea del tipo que sea
Conectado a un DataBase

La consulta se indica en la propiedad Query.SQL.Text
Los parámetros se indican con la consulta con un nombre cualquiera precedido por ':'
Los valores de los parámetros en la consulta se mandan con la propiedad Query.ParamByName(NombreCampoSinDosPuntos).AsString o AsInteger o el tipo de dato que sea.
Por último si es una consulta la abres con Query.Open o Query.Active := True;
Y si es un insert, update, delete,etc usas Query.ExecSQL;

Cualquier duda que tengas referente a ésto pídela.

De todos modos para un mejor aprendizaje con ésto te remito a la cara oculta de delphi 4

Espero te sirva.

Saludos

sierraja 22-03-2007 14:53:23

Gracias por su tiempo, en primer lugar los campos de la tabla son: numero, fecha, forma_pago (Efectivo/Cheque), nombre, monto, status_solvencia (Por Cobrar/Pagada) y vendedor. En segundo lugar quiero hacer la consulta de acuerdo a los campos que el usuario escoja, es decir, tomando en cuenta lo siguiente: puede ser fecha, por periodo, por forma_pago, por vendedor, todos los campos o seleccionar los que el usuario quiera. El siguiente codigo lo utilizo para realizar un simple consulta:


Código Delphi [-]
dm_0.ibds_Factura_Uno_Cobrar.DisableControls;
dm_0.ibds_Factura_Uno_Cobrar.Close;
dm_0.ibds_Factura_Uno_Cobrar.SelectSQL.Text:='select * from FACTURA_UNO_COBRAR where STATUS_SOLVENCIA=:x_sol order by FACTURA ASC';
dm_0.ibds_Factura_Uno_Cobrar.ParamByName('x_sol').AsString:='Por Cobrar';
dm_0.ibds_Factura_Uno_Cobrar.Open;
dm_0.ibds_Factura_Uno_Cobrar.EnableControls;

Neftali [Germán.Estévez] 22-03-2007 15:33:50

Si lo que quieres es seleccionar camps, debes sustituir el * por los campos que quieras; Otra solución menos eficiente es traerlos todos y luego "ocultar" al usuario los que no ha seleccionado.

Si lo que quieres es que el usuario vea todos los campos, pero Filtrados por algunos de ellos, pues debes rellenar la porpiedad SELECTSQL de acuerdo con lo que el usuario haya rellenado; De forma similar a como te he explicado antes.

sierraja 22-03-2007 18:34:12

Es exactamente como tu dices, pero no tengo idea de como comenzar o que estructura tener en cuenta para ir rellenando el sqlselect con los campos requeridos por el usuario. Gracias :confused:

Neftali [Germán.Estévez] 22-03-2007 19:17:45

Cita:

Empezado por sierraja
Es exactamente como tu dices...

Ha dicho las dos. ¿La del primer párrafo o la del segundo?
(a) Sólo algunos campos en el SELECT.
(b) Todos los campos en el SELECT y añadir algunos al WHERE
(c) Algunos campos al SELECT y algunos al WHERE. (añadida nueva)


La franja horaria es GMT +2. Ahora son las 17:42:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi