IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Utilisation des transactions


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de choubak
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 123
    Points : 82
    Points
    82
    Par défaut Utilisation des transactions
    bonjour,

    Je n'arrive pas à utiliser les transactions et je remarque qu'il n'y a pas beaucoup d'aide à ce sujet
    Voila comment je procede
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Private Sub BtnRAZ_Click()
    On Error GoTo Exit_BtnMouvement_Click
    DoCmd.OpenForm "Mot de passe", acNormal, , , , acDialog
    If Not blnPasswordOK Then
        Exit Sub
    End If
    DoCmd.OpenForm "ChoixMoisAnnée", acNormal, , , , acDialog
    Cancel = Not ChoixHistoOK
    BeginTrans
    DoCmd.RunSQL ("requete SQL")
    DoCmd.RunSQL ("requete SQL")
    DoCmd.RunSQL ("requete SQL")
    DoCmd.RunSQL ("requete SQL")
    DoCmd.RunSQL ("requete SQL")
    MsgBox "Mise à jour effectué", vbInformation
     
    Exit_BtnMouvement_Click:
        MsgBox "Il y à eu un problème, la mise à jour a échouée", vbCritical
        Rollback
        Exit Sub
    end sub
    De plus je ne comprend pas pourquoi le messagebox en cas d'erreur s'execute alor qu'il n'y as pas d'erreur

    Bref si quelqu'un peut m'aider, j'en serait bien content
    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par choubak
    De plus je ne comprend pas pourquoi le messagebox en cas d'erreur s'execute alor qu'il n'y as pas d'erreur
    Par ce que tu le lui demande en quittant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Exit_BtnMouvement_Click:
        MsgBox "Il y à eu un problème, la mise à jour a échouée", vbCritical
    Je crois que ce ira mieux comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Private Sub BtnRAZ_Click()
    On Error GoTo Err_BtnMouvement_Click
    DoCmd.OpenForm "Mot de passe", acNormal, , , , acDialog
    If Not blnPasswordOK Then
        Exit Sub
    End If
    DoCmd.OpenForm "ChoixMoisAnnée", acNormal, , , , acDialog
    Cancel = Not ChoixHistoOK
    BeginTrans
         DoCmd.RunSQL ("requete SQL")
         DoCmd.RunSQL ("requete SQL")
         DoCmd.RunSQL ("requete SQL")
         DoCmd.RunSQL ("requete SQL")
         DoCmd.RunSQL ("requete SQL")
         MsgBox "Mise à jour effectué", vbInformation
    CommitTrans 'C'est ici que la validation est faite
     
    Exit_BtnMouvement_Click:
        Exit Sub
     
    Err_BtnMouvement_Click:
        MsgBox "Il y à eu un problème, la mise à jour a échouée", vbCritical
        Rollback
        Goto Exit_BtnMouvement_Click
    end sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Private Sub BtnRAZ_Click()
    On Error GoTo Exit_BtnMouvement_Click
    DoCmd.OpenForm "Mot de passe", acNormal, , , , acDialog
    If Not blnPasswordOK Then
        Exit Sub
    End If
    DoCmd.OpenForm "ChoixMoisAnnée", acNormal, , , , acDialog
    Cancel = Not ChoixHistoOK
    BeginTrans
    DoCmd.RunSQL ("requete SQL")
    DoCmd.RunSQL ("requete SQL")
    DoCmd.RunSQL ("requete SQL")
    DoCmd.RunSQL ("requete SQL")
    DoCmd.RunSQL ("requete SQL")
    MsgBox "Mise à jour effectué", vbInformation
    Exit Sub
    Exit_BtnMouvement_Click:
        MsgBox "Il y à eu un problème, la mise à jour a échouée", vbCritical
        Rollback
        
    end sub

  4. #4
    Membre régulier Avatar de choubak
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    Merci avous d'avoir répondu

    J'ai fait selon la solution de dmboup, le probleme est le suivant désormais

    J'ai provoqué une erreur volontaire dans une requete SQL, je ne comprend pas le message "mise à jour effectuée s'affiche" puis ensuite "La mise a jour a échouée" et enfin le code plante en me disant que je fait un rollback alors que je n'est pas de transaction

    étrange non?

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Normal je dirais

    Il faut mettre cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox "Mise à jour effectué", vbInformation
    dans la partie Exit ...
    Mais il faut aussi tester s'il n'ya pas eu d'erreur avant de l'afficher.
    Pour cela crée une variable ErrTrouve (Integer) ...
    Voila comment faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Private Sub BtnRAZ_Click()
    Dim ErrTrouve As Integer
    On Error GoTo Err_BtnMouvement_Click
    DoCmd.OpenForm "Mot de passe", acNormal, , , , acDialog
    If Not blnPasswordOK Then
        Exit Sub
    End If
    ErrTrouve=0
    DoCmd.OpenForm "ChoixMoisAnnée", acNormal, , , , acDialog
    Cancel = Not ChoixHistoOK
    BeginTrans
       DoCmd.RunSQL ("requete SQL")
       DoCmd.RunSQL ("requete SQL")
       DoCmd.RunSQL ("requete SQL")
       DoCmd.RunSQL ("requete SQL")
       DoCmd.RunSQL ("requete SQL")
    CommitTrans
     
    Exit_BtnMouvement_Click:
        If ErrTrouve=0 then
              MsgBox "Mise à jour effectué", vbInformation
        End If
        Exit sub
     
    Err_BtnMouvement_Click:
        MsgBox "Il y à eu un problème, la mise à jour a échouée", vbCritical
        Rollback
        ErrTrouve=1
        Goto Exit_BtnMouvement_Click:
    end sub

  6. #6
    Membre régulier Avatar de choubak
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    Bon en combinant vos 2 solutions et en ajoutant quelquechose que j'ai trouvé sur internet, j'ai fait ceci. Par contre mon rollback ne marche pas du tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub BtnRAZ_Click()
    On Error GoTo Err_BtnMouvement_Click
    DoCmd.OpenForm "Mot de passe", acNormal, , , , acDialog
    If Not blnPasswordOK Then
        Exit Sub
    End If
    DoCmd.OpenForm "ChoixMoisAnnée", acNormal, , , , acDialog
    Cancel = Not ChoixHistoOK
    BeginTrans
        DoCmd.RunSQL ("INSERT INTO [historique Décor] ( [Nom client], [Code P2000], [Mots clef], [Ref seau], Support, Fournisseur, Mois, Année, Commentaire ) SELECT Décor.[Nom client], Décor.[Code P2000], Décor.[Mots clef], Décor.[Ref seau], Décor.Support, Décor.Fournisseur, '" & Mois & "' AS Expr1, " & Année & " AS Expr2, Décor.Commentaire FROM Décor;")
        DoCmd.RunSQL ("INSERT INTO [historique mouvement] ( [Code P2K], [Date], Récéption, [Quantité entrée], [Quantié sortie], Quantité, [Quantité restante], Rack, Mois, Année )SELECT Mouvement.[Code P2K], Mouvement.Date, Mouvement.Récéption, Mouvement.[Quantité entrée], Mouvement.[Quantié sortie], Mouvement.Quantité, Mouvement.[Quantité restante], Mouvement.Rack, '" & Mois & "' AS Expr1, " & Année & " AS Expr2 FROM Mouvement;")
        DoCmd.RunSQL ("INSERT INTO temp ( [Quantité restante], [Code P2K], rack ) SELECT Last(Mouvement.[Quantité restante]) AS [DernierDeQuantité restante], Mouvement.[Code P2K], First(Mouvement.Rack) AS PremierDeRack FROM Mouvement GROUP BY Mouvement.[Code P2K];")
        DoCmd.RunSQL ("DELETE Mouvement.[Code P2K], Mouvement.Date, Mouvement.Récéption, Mouvement.[Quantité entrée], Mouvement.[Quantié sortie], Mouvement.Quantité, Mouvement.[Quantité restante], Mouvement.Rack FROM Mouvement;")
        DateMaj = CDate("01" & " " & Format(Mois, "m") & "/" & Format(Date, "yyyy"))
        SQL = "INSERT INTO Mouvement ( [Code P2K], [Date], Quantité, [Quantité restante], Rack ) SELECT temp.[Code P2K], #" & DateMaj & "#, temp.[Quantité restante], temp.[Quantité restante], temp.rack FROM temp;"
        DoCmd.RunSQL SQL
        DoCmd.RunSQL ("DELETE temp.[Code P2K], temp.[Quantité restante]FROM temp;")
        MsgBox "Mise à jour effectué", vbInformation
        If MsgBox(Prompt:="Commit Transaction?", Buttons:=vbYesNo) = vbYes Then
            CommitTrans
        Else
            Rollback
        End If
    Exit Sub
     
    Err_BtnMouvement_Click:
        MsgBox "Il y à eu un problème, la mise à jour a échouée", vbCritical
        GoTo Exit_BtnMouvement_Click
     
    Exit_BtnMouvement_Click:
        Exit Sub
    End Sub
    Ce serait plus pratique si je pouvais tester si la transaction s'est executer entierement
    Avis aux amateurs

Discussions similaires

  1. Problème avec l'utilisation des transactions
    Par devvanjier dans le forum Windows Forms
    Réponses: 5
    Dernier message: 25/05/2011, 17h03
  2. [PDO] Utilisation des transactions
    Par anrow dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 03/03/2010, 03h25
  3. [MSI] utilisation des transaction multiples
    Par oupslelapin dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 16/02/2009, 17h11
  4. Réponses: 2
    Dernier message: 27/06/2007, 00h37
  5. Utilisation des transactions
    Par mathias dans le forum Access
    Réponses: 1
    Dernier message: 19/03/2007, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo