Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-10-2011
carlix_pc carlix_pc is offline
Registrado
NULL
 
Registrado: oct 2011
Posts: 1
Poder: 0
carlix_pc Va por buen camino
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...

Última edición por ecfisa fecha: 29-10-2011 a las 21:06:46. Razón: Agregar etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #2  
Antiguo 29-10-2011
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 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.
__________________
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
Video en Tiempo real Chalo78 Varios 0 26-01-2006 18:13:58
Video en tiempo real Fitoperu Internet 1 25-08-2005 21:47:07
Videos en tiempo real Albano Internet 4 07-06-2005 22:51:56
Buen Pc en Tiempo Real Rabata Varios 0 19-11-2003 16:48:01
Actualizar En Tiempo Real GIVO SQL 3 21-07-2003 19:10:31


La franja horaria es GMT +2. Ahora son las 07:03:09.


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