Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2007
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 22-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿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
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 22-03-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
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

Última edición por Bicho fecha: 22-03-2007 a las 11:36:27.
Responder Con Cita
  #4  
Antiguo 22-03-2007
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
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;
Responder Con Cita
  #5  
Antiguo 22-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 22-03-2007
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 22-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
consulta sobre el date time picker kazcote Varios 3 20-07-2006 10:32:54
crear un dbf en time ejecucion fartycl Conexión con bases de datos 2 28-06-2006 02:42:51
URRRRRGENTE!! Crear una consulta en Delphi Ariotto Conexión con bases de datos 2 26-08-2004 23:02:51
crear tabla desde una consulta sql... ronimaxh SQL 6 27-07-2004 15:57:57
Crear tabla en base a consulta pzhero Firebird e Interbase 3 22-06-2004 11:29:42


La franja horaria es GMT +2. Ahora son las 00:38:38.


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