Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ver actualizaciones a la BdD en tiempo real (https://www.clubdelphi.com/foros/showthread.php?t=76403)

carlix_pc 29-10-2011 18:13:56

Ver actualizaciones a la BdD en tiempo real
 
Saludos, espero me podais dar una mano con una aplicación hecha en Delphi 7. Tengo dos TIBQuerys (QUser y QBitacora) cuyos datos se muestran en dos TDBGrids cada uno enlazado con su respectivo TDataSource. Tengo también un TIBQuery (QInsertarUser) para añadir registros. Todos ellos están conectados a un TIBDataBase (celina) y comparten el mismo TIBTransaction (Tcelina). Funciona de maravilla al insertar un registro. Sencillamente:
Código Delphi [-]
  QInsertarUser.Close;
  QInsertarUser.Params[0].AsString:="Mineral complejo";         // Tipo de carga  
  QInsertarUser.Params[1].AsString:="Mina San José";            // Procedencia de la carga
  QInsertarUser.Params[2].AsInteger:=125;                          // Peso en toneladas
  QInsertarUser.Params[3].AsString:="Zinc";                         // Mineral predominante
  QInsertarUser.ExecSQL;
  Tcelina.Commit;
  ShowMessage('Los datos se han guardado correctamente.');
Para ver el registro insertado inmediatamente en su TDBGrid simplemente hago:
Código Delphi [-]
  QUser.Close;
  QUser.Open;

Sin embargo "desaparecen" los registros de QBitacora (donde con un select muestro fecha, hora y descripcion de todas las tareas hechas) de su TDBGrid respectivo después de hacer toda la tarea de arriba. Me parece que al hacerle el commit a Tcelina, el QBitacora se cierra pues para que los registros no "desaparezcan" de su TDBGrid también tengo que hacer:
Código Delphi [-]
  QBitacora.Close;
  QBitacora.Open;
Y no hay mayor problema. El hecho es que quiero ver usando TDBGrids todos los cambios hechos inmediatamente después de insertar, modificar o eliminar un registro. El lío está en que quizás tenga que hacer la operación de cerrar y abrir tooooooodos los TIBQuerys (que comparten todos un mismo TIBTransaction). Puedo hacerlo pero ¿Hay forma de saltarse esta tarea tan morosa? Usé un TIBTransaction adicional para la consulta que permite añadir registros pero ya no puedo ver el registro inmediatamente añadido en el TDBGrid de QUser a menos que primero le haga un commit a su TIBTransaction y luego cierre y abra QUser. ¿Significa que hay que hacerle commit a todas las transacciones y abrir y cerrar sus respectivas consultas para ver los cambios hechos inmediatamente en un TDBGrid?
Es mi primera experiencia con Firebird, antes hacía todo usando el MSAccess y obviamente nunca tuve esos problemas pero la empresa ha crecido, hay más empleados, más usuarios y el MSAccess no va más. ¿Quizás deba usar más de un TIBDatabase o un TIBTransaction o tal
vez usar otro componente de la paleta de Interbase o cambiar alguna propiedad en el Object Inspector? Ojalá se haya comprendido.
Gracias mil y un abrazo...

ecfisa 29-10-2011 21:38:54

Hola carlix_pc y bienvenido a los foros de Club Delphi :)

Lo que sucede es que Commit almacena los cambios y finaliza la actual transaccion por lo tanto afecta a todos los TDataSets asociados a él.

Así que si no te entiendí mál, tu problema se solucionaría así:
Código Delphi [-]
  QInsertarUser.Close;
  QInsertarUser.Params[0].AsString:="Mineral complejo";         // Tipo de carga  
  QInsertarUser.Params[1].AsString:="Mina San José";            // Procedencia de la carga
  QInsertarUser.Params[2].AsInteger:=125;                          // Peso en toneladas
  QInsertarUser.Params[3].AsString:="Zinc";                         // Mineral predominante
  QInsertarUser.ExecSQL;
  Tcelina.CommitRetaining;
  QUser.Close;
  QUser.Open;
CommitRetaining también almacena todos los cambios, pero a diferencia de Commit, no finaliza la transacción actual.

Un saludo.


La franja horaria es GMT +2. Ahora son las 13:08:55.

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