Usar transacciones en un objeto Recordset de DAO
Una transacción es un conjunto de operaciones agrupadas y controladas como una sola unidad de trabajo. El trabajo en una transacción debe completarse como un todo; Si se produce un error en alguna parte de la transacción, se produce un error en toda la transacción. Las transacciones ofrecen al desarrollador la capacidad de aplicar la integridad de los datos. Con varias operaciones de base de datos agrupadas en una sola unidad que debe realizarse correctamente o producir un error en su conjunto, la base de datos no puede alcanzar un estado incoherente. Las transacciones son comunes a la mayoría de los sistemas de administración de bases de datos.
El ejemplo más habitual de procesamiento de transacciones lo representa el cajero de automático de un banco (ATM). Los procesos de expedición de dinero en efectivo y posterior carga del importe en la cuenta del usuario se consideran una unidad lógica de trabajo y están agrupados en una transacción: El dinero no se expide a menos que el sistema pueda cargarlo en la cuenta. Mediante el uso de una transacción, toda la operación o se realiza correctamente o genera un error. Esto mantiene en un estado coherente la base de datos del cajero automático.
Considere la posibilidad de utilizar transacciones si desea asegurarse de que cada una de las operaciones de un grupo de operaciones se realiza correctamente antes de confirmarlas todas. Tenga en cuenta que cada una de las transacciones resulta invisible para el resto. Es decir, ninguna transacción puede ver las actualizaciones realizadas por otra en la base de datos hasta que ésta se confirma.
Nota:
El comportamiento de las transacciones con bases de datos de Access es diferente al comportamiento de los orígenes de datos ODBC, como SQL Server. Por ejemplo, si una base de datos se conecta a un servidor de archivos, y éste se detiene antes de que una transacción haya tenido tiempo de realizar sus cambios, entonces la base de datos podría quedar en un estado incoherente. Si necesita asistencia real con las transacciones con respecto a la durabilidad, debería considerar una arquitectura cliente/servidor.
El motor de base de datos de Access admite transacciones a través de los métodos BeginTrans, CommitTrans y Rollback de DAO del objeto Workspace .
El siguiente ejemplo de código cambia el puesto de todos los representantes de ventas de la tabla Empleados. Después de que el método BeginTrans inicie una transacción que aísla todos los cambios realizados en la tabla Empleados, el método CommitTrans guarda los cambios. Tenga en cuenta que puede utilizar el método Rollback para deshacer cambios que ha guardado con el método Update.
Sub ChangeTitle()
Dim wrkCurrent As DAO.Workspace
Dim dbsNorthwind As DAO.Database
Dim rstEmployee As DAO.Recordset
On Error GoTo ErrorHandler
Set wrkCurrent = DBEngine.Workspaces(0)
Set dbsNorthwind = CurrentDB
Set rstEmployee = dbsNorthwind.OpenRecordset("Employees")
wrkCurrent.BeginTrans
Do Until rstEmployee.EOF
If rstEmployee!Title = "Sales Representative" Then
rstEmployee.Edit
rstEmployee!Title = "Sales Associate"
rstEmployee.Update
End If
rstEmployee.MoveNext
Loop
If MsgBox("Save all changes?", vbQuestion + vbYesNo) = vbYes Then
wrkCurrent.CommitTrans
Else
wrkCurrent.Rollback
End If
rstEmployee.Close
dbsNorthwind.Close
wrkCurrent.Close
Set rstEmployee = nothing
Set dbsNorthwind = Nothing
Set wrkCurrent = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
Cuando se usan transacciones, todas las bases de datos y los objetos Recordset del objeto Workspace especificado se ven afectados; las transacciones son globales para el área de trabajo, no para una base de datos o un objeto Recordset específicos. Si realiza operaciones en varias bases de datos o dentro de una transacción del área de trabajo, los métodos Commit y Rollback afectarán a todos los objetos modificados dentro de dicha área de trabajo durante la transacción.
También puede usar los métodos BeginTrans, CommitTrans y Rollback con el objeto DBEngine . En este caso, la transacción se aplica al área de trabajo predeterminada, que es DBEngine.Workspaces(0)
.
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de