Transaccion utilizando DAO

Quisiera saber como puedo hacer transacciones, controlando los errores y saber si se utiliza Begintrans, CommitTrans y Rollback, por favor puedes explicarme sobre esto, si tuvieras un ejemplo.
Te estaré agradecido.
Mi E-Mail es: [email protected].
Respuesta
1
Las transacciones son como un contexto, es decir, todas las acciones (insertar, editar o borrar) que hagas dentro de dicho contexto, pueden ser finalmente anuladas o "fijadas" en la base de datos.
El inicio de una transacción empieza con un BeginTrans y acaba cuando aparece un CommitTrans ("fijas" los datos a la BBDD) o un RollbackTrans (descartas todas las acciones que has hecho).
Lo mejor es que la transacción este contenida en un procedimiento, no la inicies en un procedimiento y la finalices en otro, ya que en muchas bases de datos, hay tiempos limites para el "cierre" de transacciones.
Un ejemplo:
Private Sub pInsertarRegistro()
Dim bInTrans As Boolean
On Error Goto TratarError
DBEngine.WorkSpace(0).BeginTrans: bInTrans = True
DBEngine.WorkSpace(0).Execute "INSERT INTO [Tabla] ..."
DBEngine.WorkSpace(0).CommitTrans: bInTrans = False
TratarError:
If bInTrans Then DBEngine.WorkSpace(0).RollbackTrans
If Err.Number Then
MsgBox Err.Description, vbCritical, Err.Source
Err.Clear
End If
End Sub
Hola otra vez, tu respuesta es buena, pero quiero saber como lo haría con varias tablas, ademas quisiera saber como declarar un objeto dbengine, o la verdad es que quiero que me expliques con un ejemplo, claro si no te quito tanto tiempo.
Pero desde ya te estoy agradecido.
Gracias.
Desde Peru, Jonny
Haber, el ejemplito que te he puesto hace una inserción en una tabla, pero podrías hacerlo en tres o cuatro, en las que quieras. Puedes hacer tantas acciones como quieras mientras que no "cierres" la transacción:
DBEngine.WorkSpace(0).BeginTrans: bInTrans = True
DBEngine.WorkSpace(0).Execute "INSERT INTO [Tabla1] ..."
DBEngine.WorkSpace(0).Execute "UPDATE [Tabla1] SET ..."
DBEngine.WorkSpace(0).Execute "INSERT INTO [Tabla2] ..."
DBEngine.WorkSpace(0).Execute "DELETE FROM [Tabla1] ..."
DBEngine.WorkSpace(0).Execute "UPDATE [Tabla2] SET ..."
DBEngine.WorkSpace(0).CommitTrans: bInTrans = False
Hasta que no acabes la transacción con "Commit" o "Rollback", puedes hacer tantas acciones sobre tantas tablas como quieras.
Lo del DBEngine no hace falta que lo declares, es un objeto que viene por defecto embebido en VB (como App, Forms, etc).
Lo del ejemplo, no se, que quieres exactamente, creo que más o menos te lo estoy dando ya. A través del foro poco más puedo ponerte...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas