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 :

Supprimer un enregistrement [AC-2016]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 59
    Points : 30
    Points
    30
    Par défaut Supprimer un enregistrement
    Bonsoir à tous,
    Après exécution du code ci-après, tous les enregistrements sont supprimés au lieu de l'enregistrement en cours.

    N.B: j'ai une liste déroulante sur laquelle s'effectue la recherche. après Mise A Jour de la liste déroulante, l'enregistrement concerné s'affiche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub btnDeleteClient_Click()
    Dim Valeur As String
    With txtFindClient
    If .ListIndex <> -1 Then
    Valeur = .ItemData(.ListIndex)
    CurrentDb.Execute "DELETE FROM T_Clients WHERE " & _
    BuildCriteria("IDClient", dbIntegrer, Valeur), dbFailOnError
    txtFindClient.Requery
    End If
    End With
    If MsgBox("Voulez-vous confirmer la suppression?", vbQuestion + vbYesNo, "CONFIRMATION") = vbNo Then
    Me.Undo
    Cancel = False
    End If
    Merci pour vos différentes contributions!

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 650
    Points : 14 628
    Points
    14 628
    Par défaut
    Bonsoir,
    1) passer par une requête pour supprimer un enregistrement rend caduque l'utilisation de Undo ou Cancel
    2) sur le clic d'un bouton le Undo est inopérant
    3) comment la sélection de l'enregistrement à supprimer se fait-elle, peux-tu expliquer ce que fait ce code ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BuildCriteria("IDClient", dbIntegrer, Valeur)
    il vaut mieux d'abord poser la question et ensuite supprimer l'enregistrement si l'utilisateur répond Oui
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 650
    Points : 14 628
    Points
    14 628
    Par défaut
    pour BuildCriteria, j'ai la réponse. Je ne connaissais pas cette fonction. Cependant, il vaudrait mieux passer par une variable de manière à bien vérifier que le filtre est correctement exécuté :
    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
    Dim Valeur As String
    Dim strCritere as string
    If MsgBox("Voulez-vous confirmer la suppression?", vbQuestion + vbYesNo, "CONFIRMATION") = vbNo Then
        Msgbox "Suppression annulée"
        Exit sub
    Else
        With txtFindClient
            If .ListIndex <> -1 Then
                Valeur = .ItemData(.ListIndex)
                strCritere = BuildCriteria("IDClient", dbIntegrer, Valeur)
                Msgbox strCritere   ' pour vérifier le filtre
    	    'on met en commentaires l'exécution de la requête de suppression pour l'instant
                'CurrentDb.Execute "DELETE FROM T_Clients WHERE " & strCritere , dbFailOnError
                txtFindClient.Requery
            End If
        End With
     
    End If
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Bonsoir,
    1) passer par une requête pour supprimer un enregistrement rend caduque l'utilisation de Undo ou Cancel
    2) sur le clic d'un bouton le Undo est inopérant
    3) comment la sélection de l'enregistrement à supprimer se fait-elle, peux-tu expliquer ce que fait ce code ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BuildCriteria("IDClient", dbIntegrer, Valeur)
    il vaut mieux d'abord poser la question et ensuite supprimer l'enregistrement si l'utilisateur répond Oui


    Bonjour....
    Merci pour ta participation.

    la sélection de l'enregistrement se fait par choix dans une liste déroulante.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    pour BuildCriteria, j'ai la réponse. Je ne connaissais pas cette fonction. Cependant, il vaudrait mieux passer par une variable de manière à bien vérifier que le filtre est correctement exécuté :
    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
    Dim Valeur As String
    Dim strCritere as string
    If MsgBox("Voulez-vous confirmer la suppression?", vbQuestion + vbYesNo, "CONFIRMATION") = vbNo Then
        Msgbox "Suppression annulée"
        Exit sub
    Else
        With txtFindClient
            If .ListIndex <> -1 Then
                Valeur = .ItemData(.ListIndex)
                strCritere = BuildCriteria("IDClient", dbIntegrer, Valeur)
                Msgbox strCritere   ' pour vérifier le filtre
    	    'on met en commentaires l'exécution de la requête de suppression pour l'instant
                'CurrentDb.Execute "DELETE FROM T_Clients WHERE " & strCritere , dbFailOnError
                txtFindClient.Requery
            End If
        End With
     
    End If


    j'y avais pas pensé, je vérifie ça et reviens vers toi

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    tee_grandbois j'ai testé ton code mais il fait pareil que celui j'exécutais, à savoir "il supprime tous les enregistrements de ma table au lieu de supprimer l'enregistrement sélectionné"

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 650
    Points : 14 628
    Points
    14 628
    Par défaut
    quelle est la valeur affichée avec Msgbox strCritere ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    quelle est la valeur affichée avec Msgbox strCritere ?
    45

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 650
    Points : 14 628
    Points
    14 628
    Par défaut
    C'est bizarre, cela devrait être : IDClient=45
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Bonjour t_grandbois et à tous les membres!

    Le Msgbox StrCritere affiche actuellement [IDClient] et le constat effectué est que tous les autres enregistrements sont supprimés sauf celui sélectionné.

    Je rappel que l'objectif est de supprimer l'enregistrement sélectionné (à partir d'une liste déroulante).

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 650
    Points : 14 628
    Points
    14 628
    Par défaut
    Bonjour,
    si StrCritere affiche seulement [IDClient] cela veut dire que la sélection ne se fait pas.
    La conséquence est que la base exécute la requête suivante (qui est syntaxiquement correcte, mais qui va supprimer tous les enregistrements) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "DELETE FROM T_Clients WHERE [IDClient]"
    Il faut donc vérifier toutes les variables avant d'exécuter la requête, à commencer par la variable Valeur récupérée avec txtFindClient.itemdata(txtFindClient.Listindex)

    D'autre part, je te conseille plus simplement d'exécuter ta requête comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "DELETE FROM T_Clients WHERE IDClient=" & CLng(Valeur) , dbFailOnError
    cela permet au moins de ne pas supprimer tous les enregistrements si Valeur ne contient rien, car cela fera planter l'exécution
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Bonjour à vous!

    Je crois avoir trouvé la solution après des ramifications.

    je mets le code si ça peut aider quelqu'un d'autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Valeur As String
    Dim strCriteria As String
    If MsgBox("Voulez-vous confirmer la suppression?", vbQuestion + vbYesNo, "CONFIRMATION") = vbNo Then
        MsgBox "Suppression annulée"
        Exit Sub
    Else
    With txtFindClient
    If .ListIndex <> -1 Then
    Valeur = .ItemData(.ListIndex)
    strCriteria = BuildCriteria("IDClient", dbIntegrer, Valeur)
    DoCmd.RunSQL "DELETE FROM T_Clients WHERE IDClient=" & strCriteria, dbFailOnError
    MsgBox "Suppression effectuée"
    txtFindClient.Requery
    merci à tous et spécialement à t_grandbois pour l'aide...

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

Discussions similaires

  1. Supprimer un enregistrement
    Par Riouxe21 dans le forum ASP
    Réponses: 14
    Dernier message: 16/07/2004, 17h43
  2. HELP!Comment supprimer des enregistrements de tables jointes
    Par ROOTPARIS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/06/2004, 16h41
  3. Supprim un enregistrement de table2 si le même dans table1
    Par arno24 dans le forum Bases de données
    Réponses: 15
    Dernier message: 27/02/2004, 22h40
  4. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 00h59
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

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