Saltar al contenido

¿Tenemos transacciones en MS-Access?

Solución:

En realidad, nadie le ha dado ejemplos de código aquí en la respuesta o incluso ha citado un ejemplo (aunque los archivos de ayuda de Access incluyen ejemplos). La cuestión clave a tener en cuenta es que en Jet / ACE (Access no admite transacciones en sí, depende del motor de base de datos que esté usando para eso) que la transacción se controla en el nivel del espacio de trabajo. Puede crear un nuevo espacio de trabajo para su transacción o crear uno nuevo. Aquí hay un código de muestra:

  On Error GoTo errHandler
    Dim wrk As DAO.Workspace
    Dim db As DAO.Database
    Dim lngInvoiceID As Long

    Set wrk = DBEngine.Workspaces(0)
    Set db = wrk.OpenDatabase(CurrentDb.Name)
    With wrk
      .BeginTrans
      db.Execute "INSERT INTO tblInvoice (CustomerID) VALUES (123);", dbFailOnError
      lngInvoiceID = db.OpenRecordset("SELECT @@IDENTITY")(0)
      db.Execute "INSERT INTO tblInvoiceDetail (InvoiceID) VALUES (" & lngInvoiceID & ")", dbFailOnError
      .CommitTrans
      Debug.Print "Inserted Invoice header and detail for Invoice " & lngInvoiceID
    End With

  exitRoutine:
    If Not (db Is Nothing) Then
       db.Close
       Set db = Nothing
    End If
    Set wrk = Nothing
    Exit Sub

  errHandler:
    MsgBox Err.Number & ": " & Err.Description, vbExclamation, "Error in transaction"
    wrk.Rollback
    Resume exitRoutine

(código probado y funcionando dentro de Access)

Parece que lo hacemos: MSDN – Declaración TRANSACTION (Microsoft Access SQL)

Las transacciones no se inician automáticamente. Para iniciar una transacción, debe hacerlo explícitamente utilizando:

BEGIN TRANSACTION

Concluya una transacción comprometiendo todo el trabajo realizado durante la transacción:

COMMIT [TRANSACTION | WORK]

Concluya una transacción revertiendo todo el trabajo realizado durante la transacción:

ROLLBACK [TRANSACTION | WORK]
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *