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].
1 respuesta
Respuesta de orande
10
orande, Amplios conocimientos y experiencia en Visual Basic, SQL...
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
Añade tu respuesta sólo si conoces la solución a la pregunta.
No lo utilices para hacer una nueva pregunta.
Para pedir más datos de la pregunta utiliza "Pedir más información".
Para aportar más información a una respuesta, añade un comentario.