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

Access Discussion :

[VBA]L'ordre des évènements de suppression


Sujet :

Access

  1. #1
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2002
    Messages : 1 147
    Points : 2 522
    Points
    2 522
    Par défaut [VBA]L'ordre des évènements de suppression
    Re bonjour,

    Le sujet étant lancer sur le post précédent que j'ai fait, cela m'a fait me rappeler que j'ai un soucis avec l'ordre des évènements de suppression dans access.

    Petit récapitulatif :

    Access propose 3 évènements lors d'une demande de suppression sur une base Jet de type .mdb. Sur les projets .adp les évènements se produisent dans un ordre différent:

    1) Delete (se produit autant de fois qu'il y a d'enregistrement sélectionné)
    2) BeforeDelConfirm (1 fois avant la boite de dialogue d'access)
    3) AfterDelConfirm (Après la boite de dialogue d'access)

    Les évènements se produisent dans cet ordre. Les évènements 2 et 3 sont optionnels et peuvent ne pas se produire si sur dans la page Outils/Option, onglet "Modifier/Rechercher", l'option "Modifications des enregistrements" dans le cadre "Confirmer" est décochée. Il est par ailleurs possible de forcer par code cette option.

    L'évènement 1) Delete se produit donc pour chaque enregistrement, le 2) un fois avant qu'access demande la confirmation de suppression de l'ensemble des enregistrements sélectionnés comme supprimable à l'étape 1 et le 3) après cette demande de confirmation et ce dans tout les cas.


    Le cas à résoudre :

    Admettons maintenant que je désire effectuer un traitement quelconque lors de la suppression d'un enregistrement ou de plusieurs enregistrements.

    Soit je code ce traitement lors de l'évènement Delete, mais rien ne garantit que l'utilisateur ne va pas refuser la suppression entre les évènements 2 et 3, impossible de présumer de cela et impossible d'effectuer facilement un roolback de mon traitement.

    Soit je part du principe que je code ce traitement après l'évènement 3 mais dans ce cas, je ne sais pas quels sont les enregistrement qui ont été supprimés.

    Soit je désactive la confirmation de la suppresion par access (menu option/....) et je suis sur que l'utilisateur ne refusera pas la suppression, par contre, il est donc de mon devoir de confirmer la suppression lors de l'évènement 1 (delete), mais ne sachant pas si l'utilisateur tente de supprimer 1 ou 10000 enregistrements, je vais lui poser la question autant de fois qu'il y a d'enregistrement.

    La solution que je n'ai pas appronfi serait peut être de passer par une transaction que j'initialiserai manuellement, mais cela me semble lourd.


    Si certains de vous ont une idée à me proposer pour résoudre cette tache, je suis fortement intéréssé.



    [Edit]
    Je viens de rapidement tester avec une transaction, cela a l'air de fonctionner, à condition que l'utilisateur n'est pas désactivé la confirmation de suppression dans les options. Par contre c'est assez lourd au niveau code.

    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
     
    Option Compare Database
    Option Explicit
     
    Dim trans As Boolean
    Dim w As Workspace
     
    Private Sub Form_AfterDelConfirm(Status As Integer)
      If Status = acDeleteOK Then   ' Si suppresion confirmé, valide la transaction
        w.CommitTrans
      Else
        w.Rollback
      End If
      trans = False
      Debug.Print "AfterDelConfirm"
    End Sub
     
    Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
      Debug.Print "BeforeDelConfirm"
    End Sub
     
    Private Sub Form_Delete(Cancel As Integer)
      Dim db As Database
      Dim re As Recordset
     
      If Not trans Then   ' Début la transaction si on ne l'a pas déjà fait
        w.BeginTrans
        trans = True      ' flag qui indique que la transaction est active
                          ' pour ne pas réactiver la transsaction si l'utilisateur
                          ' a sélectionner plusieurs enregistrements
      End If
     
      ' le traitement quelconque qui devra être annulé
      Set db = CurrentDb()
      Set re = db.OpenRecordset("TEST1")
      re.AddNew
      re("TEST") = "suppression de " & IDTEST
      re.Update
      re.Close
      db.Close
     
      Debug.Print "Delete"
    End Sub
     
    Private Sub Form_Open(Cancel As Integer)
      SetOption "Confirm Record Changes", True  ' Force la confirmation de suppression
     
      trans = False
      Set w = Workspaces(0)
    End Sub
     
     
    ' P.S. Code Quick & Dirty ^^
    N'y a t il pas plus simple ???
    [/edit]
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 501
    Points : 32 302
    Points
    32 302
    Par défaut
    Soit je désactive la confirmation de la suppresion par access (menu option/....) et je suis sur que l'utilisateur ne refusera pas la suppression, par contre, il est donc de mon devoir de confirmer la suppression lors de l'évènement 1 (delete), mais ne sachant pas si l'utilisateur tente de supprimer 1 ou 10000 enregistrements, je vais lui poser la question autant de fois qu'il y a d'enregistrement.
    Je ne vois pas où est le problème là Un formulaire ne permet pas de sélection multiple

  3. #3
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2002
    Messages : 1 147
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par Tofalu
    Je ne vois pas où est le problème là Un formulaire ne permet pas de sélection multiple
    Si en mode continu ou en mode feuille de données.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 501
    Points : 32 302
    Points
    32 302
    Par défaut
    Il ne le permet que par le sélecteur. Malheureusement, le comportement n'est pas reproductible. Le mieux reste selon moi les cases à cocher.

    Mais tu peux bidouiller quelque chose comme cela :

    Dim intAsked As Integer



    Private Sub Form_Current()
    intAsked = 0
    End Sub

    Private Sub Form_Delete(Cancel As Integer)

    If intAsked = 0 Then
    intAsked = MsgBox("Etes vous sûr de vouloir supprimer ces enregistrements ?", vbYesNo + vbQuestion)
    End If
    Cancel = Not (intAsked = VbMsgBoxResult.vbYes)

    End Sub

  5. #5
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2002
    Messages : 1 147
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par Tofalu
    Il ne le permet que par le sélecteur. Malheureusement, le comportement n'est pas reproductible. Le mieux reste selon moi les cases à cocher.
    Je ne comprend pas le sens de la réponse, si la réponse concerne le fait que l'on ne puisse pas sélectionner plusieurs enregistrements autrement que par le sélecteur, cela est faux. Même en mode formulaire, ctrl+A sélectionne l'ensemble des enregistrements.

    Par contre je ne comprend pas la remarque sur les cases à cocher.

    Mais tu peux bidouiller quelque chose comme cela :
    Les bidouilles me font toujours un peu "peur" ^^. Je me penche sur celle proposé.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

Discussions similaires

  1. [JTree][Evenements] Controller l'ordre des évènements
    Par mavina dans le forum Composants
    Réponses: 3
    Dernier message: 18/12/2009, 11h25
  2. L'ordre des évènements des pages
    Par zooffy dans le forum ASP.NET
    Réponses: 3
    Dernier message: 16/01/2008, 14h38
  3. [C#] Ordre des évènements
    Par Amara dans le forum ASP.NET
    Réponses: 5
    Dernier message: 02/06/2006, 11h52
  4. [C#] Ordre des évènements
    Par Amara dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/06/2006, 11h34
  5. [VBA-E] Ordre des feuilles d'un classeur
    Par steps5ive dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2006, 19h11

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