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

IHM Discussion :

[Form] Problème de Transaction


Sujet :

IHM

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut [Form] Problème de Transaction
    Bonjour,

    Je suis sur Access 2002.

    J'ai un formulaire. Qui affiche les lignes de mes tables. (une page qui affiche toute les lignes, et non une page par ligne de la table)

    Avec un bouton "Modifier / Enregistrer" (Quand on clique sur modifier, il se nomme en enregistrer)
    Et un bouton "Annuler" (seulment utilisable quand on est en mode modifier)

    Je voudrais utiliser une transaction, car quand je modifie un champs et que je vais sur une autre ligne et je la modifie puis je clique sur "Annuler" ca ne change que la ligne en cours.

    Le code du bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
    Pour annuler toute mes modifications j'ai pensé à utiliser les transactions.

    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
    Dim ws As DAO.Workspace
     
    Dans mon évenment bouton Modifier/ Enregistrer
     
    Set ws = Application.DBEngine.Workspaces(0)
     
    If Me.AllowEdits = False Then
        ws.BeginTrans
        Me.AllowEdits = True
        Me.Modifier.Caption = "Enregistrer"
        Me.btAnnuler.Enabled = True
        Me.Refresh
    Else
        ws.CommitTrans
        Me.AllowEdits = False
        Me.Modifier.Caption = "Modifier"
        Me.btAnnuler.Enabled = False
        Me.Refresh
    End If
    Dans mon évenment bouton Annuler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set ws = Application.DBEngine.Workspaces(0)
    ws.Rollback
    ws.BeginTrans
    Quand je clique sur le bouton Annuler il ne se passe rien.

    Merci beaucoup pour votre aide

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par Oberown
    Je voudrais utiliser une transaction, car quand je modifie un champs et que je vais sur une autre ligne et je la modifie puis je clique sur "Annuler" ca ne change que la ligne en cours.

    [...]

    Pour annuler toute mes modifications j'ai pensé à utiliser les transactions.
    J'avais un Pb du même genre et tu peux trouver dans cette file de messages une solution que tu adapteras à ton cas:
    http://www.developpez.net/forums/showthread.php?t=71989

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Je me suis inspiré de ça http://www.developpez.net/forums/sho...53&postcount=5

    Sans faire la boucle, mais ca ne marche pas :-(

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par Oberown
    Je me suis inspiré de ça http://www.developpez.net/forums/sho...53&postcount=5

    Sans faire la boucle, mais ca ne marche pas :-(
    La technique que je propose implique que tu contrôles le Workspace du Recordset dont les données sont affichées dans le formulaire.

    D'où les 3 étapes nécessaires:
    (1) créer au préalable un Recordset (qui contient les données à présenter dans le formulaire),
    (2) débuter une transaction dans le Workspace de ce Recordset,
    (3) puis assigner ce Recordset au formulaire.

    Comme je le disais (c'est bon de se citer soi-même ):
    Citation Envoyé par =JBO=
    Dans un module de code autonome, la procédure [OuvrirFormTrans] sert à créer le recordset, démarrer la transaction, ouvrir le formulaire [Test] et lui affecter le recordset, et enfin superviser la fermeture du formulaire.
    Autrement, ça ne peut pas fonctionner.

    En effet, tu n'as pas accès au Workspace qu'utilise Access:
    Application.DBEngine.Workspaces(0) n'est pas le Workspace d'Access

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Existe-t-il un autre moyen ?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par Oberown
    Existe-t-il un autre moyen ?
    Je ne comprends pas bien: un autre moyen de faire "quoi" ?

    Qu'est-ce qui pose problème pour toi dans les explications données précédemment ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Ma requête est dans source du formulaire.
    Comment faire pour la récuperer dans le code vb pour créer mon recordset ?

    C'est une requête qui vient des objets Requêtes, c'est le nom de la requête.

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Je te donne une version revue de ma proposition, totalement intégrée au formulaire (en plus, je l'ai testée).
    Citation Envoyé par Oberown
    Ma requête est dans source du formulaire.
    Comment faire pour la récuperer dans le code vb pour créer mon recordset ?

    C'est une requête qui vient des objets Requêtes, c'est le nom de la requête.
    La propriété Source du formulaire ne doit pas être renseignée.

    A la place, dans la procédure Form_Open, tu vas paramétrer la méthode oDB.OpenRecordset( <<ICI>> ) avec le nom de ta requête (c'est une chaîne de caractères, bien sûr).

    Ci-dessous, le module de code du formulaire transactionné (à adapter si tu veux gérer la transaction avec tes boutons Modifier / Enregistrer / Annuler):
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Option Compare Database
    Option Explicit
     
    Dim oWS As DAO.Workspace
    Dim oDB As DAO.Database
    Dim oRS As DAO.Recordset
     
    ' variable qui vaut True si des données ont été modifiées/ajoutées/supprimées
    Dim bValiderTrans As Boolean
     
    Private Sub Form_AfterDelConfirm(Status As Integer)
        If Status = acDeleteOK Then
            bValiderTrans = True
        End If
    End Sub
     
    Private Sub Form_AfterInsert()
        bValiderTrans = True
    End Sub
     
    Private Sub Form_AfterUpdate()
        bValiderTrans = True
    End Sub
     
    Private Sub Form_Open(Cancel As Integer)
        Set oWS = Application.DBEngine.Workspaces(0)
        Set oDB = oWS.Databases(0)
        Set oRS = oDB.OpenRecordset("SELECT * FROM T_DATA")
     
        oWS.BeginTrans
     
        Set Me.Recordset = oRS
     
        bValiderTrans = False
    End Sub
     
    Private Sub Form_Unload(Cancel As Integer)
        Dim Rés As VbMsgBoxResult
     
        If bValiderTrans Then
            Rés = MsgBox("Valider ?", vbYesNo)
        Else
            Rés = vbNo
        End If
     
        If Rés = vbNo Then
            oWS.Rollback
        Else
            oWS.CommitTrans
        End If
     
        Set oRS = Nothing
        Set oDB = Nothing
        Set oWS = Nothing
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Balise form - problème attributs name et type
    Par michihala dans le forum Struts 1
    Réponses: 3
    Dernier message: 03/04/2006, 17h17
  2. Réponses: 12
    Dernier message: 06/04/2005, 11h54
  3. Encore un petit problème de transaction
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/03/2005, 16h13
  4. parser un XHTML bien formé (problème namespace)
    Par luta dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 18/10/2004, 12h55
  5. Réponses: 5
    Dernier message: 27/08/2003, 11h45

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