Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Conexión con bases de datos
Register FAQ Members List Calendar Guía de estilo Today's Posts

Conexión con bases de datos

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 25/08/2008
Carmelo Cash's Avatar
Carmelo Cash Carmelo Cash is offline
Miembro
 
Join Date: Jul 2003
Location: Buenos Aires
Posts: 269
Poder: 24
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.
Reply With Quote
  #2  
Old 25/08/2008
felipe88's Avatar
[felipe88] felipe88 is offline
Miembro Premium
 
Join Date: May 2007
Location: Mi Valle del Cauca... Colombia!!!
Posts: 1,120
Poder: 21
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
Reply With Quote
  #3  
Old 25/08/2008
Carmelo Cash's Avatar
Carmelo Cash Carmelo Cash is offline
Miembro
 
Join Date: Jul 2003
Location: Buenos Aires
Posts: 269
Poder: 24
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.
Reply With Quote
  #4  
Old 25/08/2008
felipe88's Avatar
[felipe88] felipe88 is offline
Miembro Premium
 
Join Date: May 2007
Location: Mi Valle del Cauca... Colombia!!!
Posts: 1,120
Poder: 21
felipe88 Va por buen camino
Quote:
Originally Posted by Carmelo Cash View Post
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
Reply With Quote
  #5  
Old 25/08/2008
Carmelo Cash's Avatar
Carmelo Cash Carmelo Cash is offline
Miembro
 
Join Date: Jul 2003
Location: Buenos Aires
Posts: 269
Poder: 24
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.
Reply With Quote
  #6  
Old 25/08/2008
felipe88's Avatar
[felipe88] felipe88 is offline
Miembro Premium
 
Join Date: May 2007
Location: Mi Valle del Cauca... Colombia!!!
Posts: 1,120
Poder: 21
felipe88 Va por buen camino
Quote:
Originally Posted by Carmelo Cash View Post
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
Reply With Quote
  #7  
Old 25/08/2008
RolphyReyes's Avatar
RolphyReyes RolphyReyes is offline
Miembro
 
Join Date: Aug 2004
Location: Santo Domingo
Posts: 285
Poder: 23
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
Reply With Quote
  #8  
Old 26/08/2008
Carmelo Cash's Avatar
Carmelo Cash Carmelo Cash is offline
Miembro
 
Join Date: Jul 2003
Location: Buenos Aires
Posts: 269
Poder: 24
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?.
Reply With Quote
  #9  
Old 26/08/2008
felipe88's Avatar
[felipe88] felipe88 is offline
Miembro Premium
 
Join Date: May 2007
Location: Mi Valle del Cauca... Colombia!!!
Posts: 1,120
Poder: 21
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
Reply With Quote
  #10  
Old 26/08/2008
Carmelo Cash's Avatar
Carmelo Cash Carmelo Cash is offline
Miembro
 
Join Date: Jul 2003
Location: Buenos Aires
Posts: 269
Poder: 24
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.
Reply With Quote
  #11  
Old 26/08/2008
felipe88's Avatar
[felipe88] felipe88 is offline
Miembro Premium
 
Join Date: May 2007
Location: Mi Valle del Cauca... Colombia!!!
Posts: 1,120
Poder: 21
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
Reply With Quote
  #12  
Old 30/08/2008
Carmelo Cash's Avatar
Carmelo Cash Carmelo Cash is offline
Miembro
 
Join Date: Jul 2003
Location: Buenos Aires
Posts: 269
Poder: 24
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!!!
Reply With Quote
  #13  
Old 30/08/2008
[egostar] egostar is offline
Registrado
 
Join Date: Feb 2006
Posts: 6,572
Poder: 27
egostar Va camino a la fama
Quote:
Originally Posted by Carmelo Cash View Post
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
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Sobreescribir método Paint y saber coordenadas a refrescar Lord Delfos Gráficos 3 05/03/2008 13:48
Como Usar los COMBOBOX eddg Varios 5 24/09/2007 23:32
Refrescar Combobox Coco_jac PHP 13 29/10/2006 16:18
problemas para refrescar ElDioni Varios 1 11/07/2005 14:44
Metodo para borrar directorio VolaRe Varios 4 25/07/2004 16:29


All times are GMT +2. The time now is 01:52.


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
Copyright 1996-2007 Club Delphi