20 votes

Avons-nous des transactions dans MS-Access ?

Je développe une petite application de bureau utilisant C#.NET et MS-Access . Je n'ai pas d'expérience préalable de MS-Access. Je veux savoir si nous pouvons utiliser les transactions dans Ms-Access ou non.

Je suis dans la situation suivante.

Insérer dans Tbl1
Insérer dans Tbl2

Je veux insérer dans la tbl2 uniquement lorsque l'insertion dans la tbl1 est réussie. Et s'il y a une exception pendant l'insertion dans la tbl2, je veux annuler l'insertion dans la tbl1.
Je sais que cela peut être facilement réalisé dans sql-server, mais dans le cas de ms-access, comment dois-je gérer cela. S'il vous plaît aider, Merci d'avance.

18voto

David-W-Fenton Points 16613

Personne ne vous a donné d'exemple de code dans la réponse, ni même cité d'exemple (les fichiers d'aide d'Access contiennent cependant des exemples). La question clé à garder à l'esprit est que dans Jet/ACE (Access ne supporte pas les transactions lui-même - cela dépend du moteur de base de données que vous utilisez pour cela), la transaction est contrôlée au niveau de l'espace de travail. Vous pouvez créer un nouvel espace de travail pour votre transaction ou en créer un nouveau. Voici un exemple de code :

  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

(code testé et fonctionnant dans Access)

13voto

Daniel Vassallo Points 142049

On dirait que oui : MSDN - Déclaration TRANSACTION (Microsoft Access SQL)

Les transactions ne sont pas lancées automatiquement. Pour lancer une transaction, vous devez le faire explicitement en utilisant :

BEGIN TRANSACTION

Conclure une transaction en engageant tout le travail effectué pendant la transaction :

COMMIT [TRANSACTION | WORK]

Conclure une transaction en annulant tout le travail effectué pendant la transaction :

ROLLBACK [TRANSACTION | WORK]

0voto

Randy Minder Points 19262

Oui, Microsoft Access prend en charge les transactions et elles fonctionnent très bien. J'ai construit une application commerciale de point de vente en utilisant Access comme base de données il y a plusieurs années, et le support des transactions a très bien fonctionné.

Malgré tout, si possible, j'utiliserais SQL Server Express. Il est gratuit et beaucoup plus puissant qu'Access.

0voto

Ankush Madankar Points 1264

L'exemple pour OleDbTransaction sur MSDN est ici http://msdn.microsoft.com/en-us/library/93ehy0z8.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X