Ver Mensaje Individual
  #1  
Antiguo 01-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Transacciones con Interbase 6 / IBX Express

¿Necesitas saber cómo implementar transacciones usando Interbase 6 e IBX Express y no morir en el intento?

Pues como consejo, en tu datamodule pega un componente TIBDatabase, uno TIBTransaction y finalmente un TIBTable o cualquier TIBDataSet.

Conecta IBDatabase1 con IBTransaction1 a traves de DefaultTransaction y DefaultDatabase. Configurá IBDatabase1 par que apunte a tu base de datos (archivo.gdb, usuario y password).

Despues conecta IBTable1 con IBDatabase1 y automáticamente se conectará con IBTransaction1. Seleccioná una tabla.

¿Hasta aquí todo bien?

Entonces, seguimos. Ahora pegá un botón (el que más guste) para el Commit y otro para el Rolback. Pegá una grilla enlazada a un DataSource y éste enlazado a la tabla para que veas el resultado.

Asigná los métodos DataModule1.IBTransaction1.Commit y DataModule1.IBTransaction1.Rollback a cada botón (en el evento OnClick, por supuesto y chequendo que exista una transacción activa: DataModule1.IBTransaction1.InTransaction).

Abrí la tabla, efectuá cualquier operación y probá de usar estos botones.

¿El resultado?: Las tablas simplemente se cierran.

Agregá entonces en el evento de la tabla AfterTransactionEnd: IBTable1.Open;

¿El efecto?: Se produce una excepción.

¿Entonces?, modificá el evento AfterTransactionEnd para que quede:

Código Delphi [-]
IBTransaction1.Active := True;
IBTable1.Open;

y además agregá la línea IBTransaction1.Active := True; antes de abrir cualquier tabla.

!Y no morirás en el intento!
Responder Con Cita