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 25-08-2008
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
¿ Que Método usar para refrescar los Combobox ?

Hola Foro:

Estoy Utilizando Delhi 6 y SQL Server 2005, para conectarme uso DBexpress.

El problema que tengo es que al abrir los formularios, los combobox están actualizados, pero si en alguna terminal agregan un registro (por ejemplo) a al tabla de "Provincias", este registro no se vé en los combobox de los formularios que están abiertos.
Por ahora deben cerrar y volver a abrir el formulario pero no es una solución muy elegante que digamos.

los combobox que uso son los "DBLookupCombobox" conectados a un
TDataSourse>>TClientDataSet>>TDatasetProvider>>TSQLQuery>>TSQLConection ...(uff!...)

Los puedo refrescar haciendo

Código Delphi [-]
ClientDataSet.Active:=False;
ClientDataSet.Active:=True;

Pero el tema es ¿Cuando y cómo?.

1- No vale hacerlo en el evento "on Click", ya que genera un gran tráfico de red y los datos del combobox se modifican muy de vez en cuando.

2- Puede ser una variable que diga "Si Hay que refrescar" y Preguntar en el evento on Click por esa variable. mmmm... no sé.

3- Puede ser colocar en el formulario un Botón que diga "Refrescar"... (no me gusta, pero...)

4- Colocar un Timer que refresque cada tanto ( generaría un tráfico de red inútil ).

Lo ideal sería que los combobox se atualicen unicamente al ser modificada al tabla.

Hace un tiempo atrás dejé planteado este tema pero con otra Base de Datos y no quedó aclarado, tal vez con SQL Server se pueda solucionar.

Desde ya muchas gracias por su atención.
Responder Con Cita
  #2  
Antiguo 25-08-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Si solo deberia cambiar cuando se hace alguna actualizacion en la Bd, creo que es el momento en el que deberia actualizar el combo, o simplemente la pasas el valor que va a ser agregado en la tabla al combo... es una idea
__________________
Web
Responder Con Cita
  #3  
Antiguo 25-08-2008
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Gracias Felipe:
Efectivamente "deberia cambiar cuando se hace alguna actualizacion en la Bd, creo que es el momento en el que deberia actualizar el combo", pero el tema es cómo me entero que se actualizó la BD sin estar preguntado constantemente?.
Estoy buscando algún componente que me dispare el proceso, pero todavía no encuentro ninguno.
Responder Con Cita
  #4  
Antiguo 25-08-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Cita:
Empezado por Carmelo Cash Ver Mensaje
pero el tema es cómo me entero que se actualizó la BD sin estar preguntado constantemente?.
¿Pero como no lo vas a saber?, obviamente tu creas el post, entonces usa el after insert por ejemplo.
__________________
Web
Responder Con Cita
  #5  
Antiguo 25-08-2008
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Gracias Felipe.

Es que en primer lugar nunca uso un post, ya que las tablas las actualizo todas con consultas SQL

Código Delphi [-]
DateBase.StarTransaction;
Q_Insert.ExecSQL;
DateBase.Commit;

En segundo lugar es que si en esta terminal modifico o agrego en una tabla, el tema es que dispare el proceso de actualización en las otras terminales.
Responder Con Cita
  #6  
Antiguo 25-08-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Cita:
Empezado por Carmelo Cash Ver Mensaje
Gracias Felipe.

Es que en primer lugar nunca uso un post, ya que las tablas las actualizo todas con consultas SQL

Código Delphi [-]
DateBase.StarTransaction;
Q_Insert.ExecSQL;
DateBase.Commit;

En segundo lugar es que si en esta terminal modifico o agrego en una tabla, el tema es que dispare el proceso de actualización en las otras terminales.
Bueno ya te entiendo, pero si me gustaria saber algo ¿Como le pasas las terminales a los combo? ... porque si lo traes de una consulta...
__________________
Web
Responder Con Cita
  #7  
Antiguo 25-08-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Saludos.

En Interbase/Firebird tenemos los Eventos de la BD y con este mecanismo nos podemos dar cuenta de cualquier cosa acción.

En SQL Server desconozco si existe algo parecido pero es una idea de por donde empezar a buscar.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #8  
Antiguo 26-08-2008
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Hola:
Gracias a ambos por responder:
Le digo a Felipe que los combobox que uso son los "DBLookupCombobox" conectados a un
Código Delphi [-]
TDataSourse>>TClientDataSet>>TDatasetProvider>>TSQLQuery>>TSQLConection ...(uff!...)

Con respecto a la propuesta hecha por Rolphi Reyes es la que me gustaría hacer, pero desconozco cómo capturar eventos en SQL Server 2005.

Tal vez el título de este hilo debería haber sido ese.

¿Cómo capturar eventos en SQL Server 2005?.
Responder Con Cita
  #9  
Antiguo 26-08-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Hola, para este caso, encontré estos articulos que espero te puedan ser de ayuda:

http://technet.microsoft.com/es-es/l.../ms190176.aspx

http://technet.microsoft.com/es-es/l.../ms190378.aspx

http://technet.microsoft.com/es-es/l.../ms187875.aspx
__________________
Web
Responder Con Cita
  #10  
Antiguo 26-08-2008
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Una solución

Esto se complica cada vez más, así que lo solucioné de la siguiente manera.

Voy a romper una de las premisas, (pero sólo una parte).

Recuerdan que para actualizar el combobox había que hacer

Código Delphi [-]
ClientDataSet.Active:=False;
ClientDataSet.Active:=True;
Pero...

Código Delphi [-]
1- No vale hacerlo en el evento "on Click", ya que genera un gran tráfico de red y los datos del combobox se modifican muy de vez en cuando.

Lo que hice fué crear una tabla con dos campos
el nombre de cada tabla y la fecha de última modificación de ésa tabla, que es un campo tipo DateTime llamado "Ultima_modificacion".

Entonces al abrir los formularios "Cargo" los "Combobox" y guardo la "Ultima_modificacion", Select Ultima_modificacion From Control where Tabla='Provincias' en una variable DateTime.

Luego en el evento on ClicK y del Combobox Ejecuto nuevamente la consulta Select Ultima_modificacion From Control where Tabla='Provincias' y la comparo con la variable que guardé anteriormente.
Si es distinta actualizo los combobox.

Este método tiene tres ventajas:

1.- Genera muy poco tráfico de red, ya que sólo viaja la fecha de la última modificación.

2- La opción de guardar la fecha de última modificación en una tabla externa hace que lo que tiene que procesar el servidor sea mucho menor.

3.- Al gefe le gustó.

Gracias a todos los que participaron y espero que esto le sirva a alguien.
Responder Con Cita
  #11  
Antiguo 26-08-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Que bueno que lo solucionaste... era lo que yo me imaginaba como lo mas corto para este caso, depronto no me supe explicar , pero me alegro de que funcione
__________________
Web
Responder Con Cita
  #12  
Antiguo 30-08-2008
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Que pasa CHE!!!!

Que pasa CHE!!!!

Se pudrió todo !!!

Se vienen los chinos a ofrecer chinas???

Avisen al administrador que hay un colado!!!
Responder Con Cita
  #13  
Antiguo 30-08-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Carmelo Cash Ver Mensaje
Que pasa CHE!!!!

Se pudrió todo !!!

Se vienen los chinos a ofrecer chinas???

Avisen al administrador que hay un colado!!!
Avisados están

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
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
Sobreescribir método Paint y saber coordenadas a refrescar Lord Delfos Gráficos 3 05-03-2008 13:48:28
Como Usar los COMBOBOX eddg Varios 5 24-09-2007 23:32:54
Refrescar Combobox Coco_jac PHP 13 29-10-2006 16:18:01
problemas para refrescar ElDioni Varios 1 11-07-2005 14:44:11
Metodo para borrar directorio VolaRe Varios 4 25-07-2004 16:29:52


La franja horaria es GMT +2. Ahora son las 10:56:22.


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