Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-06-2012
gersojn gersojn is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 85
Poder: 13
gersojn Va por buen camino
Problema dblookupcombobox al hacer consulta

Hola, les comento que tengo una aplicacion, en la cual tengo una conexion a una BD Oracle XE, mediante componentes de la libreria ZeosLib, y tengo un problema con el componente dblookupcombobox.

El problema radica, que se deben efectuar consulta en la tabla X de la BD y mostrarlo en un formulario(hasta aca todo bien), dichas consultas se generan en base a los valores de la tabla Y, los valores de la Tabla Y los muestro en un dblookupcombobox. Pero al efectuar la primer consulta, el dblookupcombobox (asumiendo que tengo los siguientes valores en la tabla Y: 1,2,3) si selecciono la opcion 1 o 2 o 3, al intentar hacer otra consulta el dblookupcombobox solo me muestra la opcion elegida y ya no mas todas las que estan en la Tabla Y.

Alguen tiene una idea de que pueda causar el Problema, de antemano muchas gracias por la ayuda.
Responder Con Cita
  #2  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hombre, no somos adivinos, ya podrías poner el código fuente que usas
Responder Con Cita
  #3  
Antiguo 08-06-2012
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
Bueno que te parece si expresas mejor tu pregunta.
Responder Con Cita
  #4  
Antiguo 08-06-2012
gersojn gersojn is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 85
Poder: 13
gersojn Va por buen camino
Claro, siento no ha ver colocado el codigo, la funcion donde realizo la consulta es el siguiente.
dblookupcombobox = COMBOTIPOSALA
Código Delphi [-]
procedure TForm4.BOTONBUSCARSALAClick(Sender: TObject);
var tiposala:String;
begin
if COMBOTIPOSALA.Text = '' then
begin
QUERYSALA.Close;
QUERYSALA.SQL.Clear;
QUERYSALA.SQL.Add('SELECT * FROM SALA WHERE ESTADO='+quotedstr('LIBRE'));
QUERYSALA.Open;
end;

if COMBOTIPOSALA.Text <> EmptyStr then
begin
tiposala:= COMBOTIPOSALA.Text;
QUERYTIPOSALA.Close;
QUERYTIPOSALA.SQL.Clear;
QUERYTIPOSALA.SQL.Add('SELECT TIPO_SALA,NOMBRE FROM TIPO_SALA WHERE NOMBRE='+quotedstr(tiposala));
QUERYTIPOSALA.Open;
tiposala:=QUERYTIPOSALA.FieldByName('TIPO_SALA').AsString;
QUERYSALA.Close;
QUERYSALA.SQL.Clear;
QUERYSALA.SQL.Add('SELECT * FROM SALA WHERE TIPO_SALA='+quotedstr(tiposala)+'AND ESTADO='+quotedstr('LIBRE'));
QUERYSALA.Open;
COMBOTIPOSALA.KeyValue:=null;

end;

end;

En cuanto al dblookupcombobox lo tengo configurado en las propiedades del componente, en la barra Object Inspector.
Y nuevamente gracias por las respuestas
Responder Con Cita
  #5  
Antiguo 08-06-2012
gersojn gersojn is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 85
Poder: 13
gersojn Va por buen camino
Solucionado

Hola, ya lo he solucionado, aunque quiza no sea lo mas optimo, pero ya me funciona, adjunto el codigo.
Boton Consulta:

Código Delphi [-]
procedure TForm4.BOTONBUSCARSALAClick(Sender: TObject);
var tiposala:String;
begin
if COMBOTIPOSALA.Text = '' then
begin
QUERYSALA.Close;
QUERYSALA.SQL.Clear;
QUERYSALA.SQL.Add('SELECT * FROM SALA WHERE ESTADO='+quotedstr('LIBRE'));
QUERYSALA.Open;
end;

if COMBOTIPOSALA.Text <> EmptyStr then
begin
tiposala:= COMBOTIPOSALA.Text;
QUERYTIPOSALA.Close;
QUERYTIPOSALA.SQL.Clear;
QUERYTIPOSALA.SQL.Add('SELECT TIPO_SALA,NOMBRE FROM TIPO_SALA WHERE NOMBRE='+quotedstr(tiposala));
QUERYTIPOSALA.Open;
tiposala:=QUERYTIPOSALA.FieldByName('TIPO_SALA').AsString;
QUERYSALA.Close;
QUERYSALA.SQL.Clear;
QUERYSALA.SQL.Add('SELECT * FROM SALA WHERE TIPO_SALA='+quotedstr(tiposala)+'AND ESTADO='+quotedstr('LIBRE'));
QUERYSALA.Open;
Timer1.Enabled:=True;//Agrege un timer
end;

end;

Funcion Timer

Código Delphi [-]
procedure TForm4.Timer1Timer(Sender: TObject);
begin
QUERYTIPOSALA.Close;
QUERYTIPOSALA.SQL.Clear;
QUERYTIPOSALA.SQL.Add('SELECT NOMBRE FROM TIPO_SALA');
QUERYTIPOSALA.Open;
Timer1.Enabled:=False;
end;
Lo que hago es limpiar el Query y lanzar el mismo query nuevamente, para que el dblookupcombobox quede nuevamente con los mismos valores de la Tabla.

Gracias por la ayuda.

Última edición por gersojn fecha: 08-06-2012 a las 16:13:16. Razón: Agregar explicacion
Responder Con Cita
  #6  
Antiguo 08-06-2012
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Lo que te recomiendo es que en un datamodule tengas las consultas, fuera del form, para que sean independientes y poder llamar de distintos forms un datamodule.
Entonces en el datamodule creas un procedimiento que sea cargar TIPOSSALAS donde cerrar el dataset, lo limpias y cargas la consulta base.
Cita:
QUERYSALA.SQL.Add('SELECT * FROM SALA')
Desde el form pasas los parametros para filtrar y filtras el dataset en el datamodule de la misma forma que lo haces en el form.
Cita:
QUERYSALA.SQL.Add('WHERE TIPO_SALA='+quotedstr(elParametroDelFiltro)+'AND ESTADO='+quotedstr('LIBRE'));
La idea es aislar las consultas del formulario para ahorar volver a codificar cuando lo necesites en otra parte del sistema.
Responder Con Cita
  #7  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Lo del timer no solamente es una chapuza, es que además ese no es el problema, ni la solución.
Responder Con Cita
  #8  
Antiguo 08-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

El problema se produce por que usas el mismo query para el DBLookupComboBox y para realizar la consulta. De ese modo, cuando asignas la cadena SQL de la consulta (en el evento OnClick) se sobreescribe la primera cadena que alimentaba al combo.

Te sugiero dos alternativas:
La primera es usar dos componentes query, uno para el DBLookupComboBox y otro para la consulta (a mi criterio la mejor opción).
La otra es poner el código que asignaste al evento OnTimer al finalizar la consulta. O también salvar previamente la consulta original en una variable y asignarla al query una vez finalizada (que es lo mismo).
Código Delphi [-]
procedure TForm4.BOTONBUSCARSALAClick(Sender: TObject);
var
  ..
  ConsultaOriginal: string;
begin
  ConsultaOriginal:= QUERYTIPOSALA.SQL.Text; // salvar cadena anterior
  //...
  // las operaciones que desees con QUERYTIPOSALA...
  //...
  QUERYTIPOSALA.Close;
  QUERYTIPOSALA.SQL.Text:= ConsultaOriginal; 
  QUERYTIPOSALA.Open;
end;
Pero como dice Casimiro, usar un TTimer no soluciona nada.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
como hacer que un DBLookupComboBox muestre un historico de nombres seleccionados? mematanlimon OOP 4 28-01-2010 18:00:35
Problema al hacer consulta SQL pabliyo SQL 6 29-01-2008 10:56:17
Problemas con consulta y DBLookUpComboBox SEBACOHEN SQL 1 30-01-2007 05:15:18
Consulta sobre tablas y DBLookupCombobox silviodp Conexión con bases de datos 6 29-11-2006 03:14:02
Sincronizar DBLookupComboBox con Tquery al hacer locate en la tabla ronalg Conexión con bases de datos 1 27-05-2006 15:58:06


La franja horaria es GMT +2. Ahora son las 15:33:11.


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