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 :

Tester la présence ou pas d'un enregistrement


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut Tester la présence ou pas d'un enregistrement
    Bonjour a toutes et tous,

    Je viens requérir votre aide, cela fait un moment que je galère sur ce problème.

    Voilà, je souhaiterais faire un contrôle sur un sous-formulaire, avant de supprimer un enregistre.

    Pour faire simple, j'ai des usagers dans un véhicule et je veux vérifier que j'ai bien supprimé tous les usagers avant de supprimer le véhicule qui les concerne.

    Le contrôle marche bien quand il y a encore des usagers (Il me renvoie mon message) mais quand tous les usagers sont supprimé, il me met le message suivant "EXPRESSION SANS PARAMÈTRE"

    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
    Private Sub F_Supp_vehicule_Click()
    On Error GoTo Err_F_Supp_vehicule_Click
     
        If (Forms![F_accident_consult]![F_accident_consult_véhicule]![F_accident_consult_usager]![Id_usager] <> "") And (Forms![F_accident_consult]![F_accident_consult_véhicule]![F_accident_consult_usager]![Id_usager] = Forms![F_accident_consult]![F_accident_consult_véhicule]![Id_véhicule]) Then
        MsgBox "Attention, vous n'avez pas supprimé" & Chr(13) & "tous les usagers de ce véhicule"
     
        Else
     
        Dim stDocName As String
        Dim stLinkCriteria As String
     
        stDocName = "F_Supp_Véhicule"
     
        stLinkCriteria = "[Id_véhicule]=" & "'" & Me![Id] & "'"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    Exit_F_Supp_vehicule_Click:
        Exit Sub
     
    Err_F_Supp_vehicule_Click:
        MsgBox Err.Description
        Resume Exit_F_Supp_vehicule_Click
     
     
        End If
     
     
    End Sub
    Merci d'avance pour votre aide

    A+

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Je réponds par une question :

    Pourquoi tu n'utilises pas l'option de suppression en cascade ?

  3. #3
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    tu peux essayer l'ordre dcount sur la table utilisée par ton sous formulaire ou encore tester le me.<conteneur du sous écran>.form.recordset.recordcount
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour et merci à vous pour vos réponses.

    Pyloupylou, désolé pour mon ignorance, mais à quel niveau dans ma commande, tu mets ton teste.

    Merci d'avance pour ta réponse,

    A+

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,
    Logiquement elle prend la place de la précédente qui ne peut fonctionner.

    Merci de répondre à PC75 (au moins par correction).

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour Loufab

    Merci également pour ta réponse.

    Le "vous" de mon dernier message s'adressait, évidement, à Pyloupylou mais aussi à PC75.

    Bonne journée

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour PC75

    Je t'avoue ne pas savoir comment utiliser cette méthode.

    Merci

    Bonne journée

  8. #8
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    C'est une propriété des relations.
    Dans Access 2002 : Menu "Outils" => "Relations..." => clic droit sur la relation => "Modifier une relation..." => cocher "Effacer en cascade les enregistrements correspondants".

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Re,

    Encore merci pour ta réponse.

    J'ai suivi ta consigne, mais la case à cocher " Effacer en cascade ..." est grisée et n'est donc pas accessible. Je suppose que cela doit dépendre du type de jointure ou de relation ?. Pour mon cas les relations sont simples 1 accidents = 1 ou plusieurs véhicules = 1 ou plusieurs usagers.

    A+

  10. #10
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    il n'y aurait pas une case appliquer l'intégrité référentielle avant, mais an 2002 je ne suis pas sûr
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  11. #11
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Tes tables sont-elles attachées ou bien sont-elles dans physiquement avec les formulaires.

    S tu te trouves dans le premier cas, pour poser l'intégrité référentielle, il te faut être dans la base qui contient les tables.

    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour Pyloupylou

    Dans la base accident cet option est grisé et je ne peux donc pas la cocher.

    A oui, j'allais oublié. Dans un de tes précédents messages, tu me propose de modifier mon VBA par "me.<conteneur du sous écran>.form.recordset.recordcount". Excuse mon ignorance, mais tu le mets à quel niveau de la commande. Loufa me propose de la remplacer la précédente, mais la précédente quoi ?

    Merci encore pour tout.

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour Jeannot45,

    Effectivement les tables véhicules et usagers sont attachées.

    Dans ma base secondaire, j'ai donc les tables accidents et usagers que j'attache à ma base principale. J'ai donc été dans la base secondaire, pour voir les relations entre les deux tables. effectivement, je peux cocher la case concernant l'intégrité référentielle, ce qui me donne accès à la mise à jour et à l'effacement en cascade. J'ai donc cocher effacer en cascade, mais au moment de valider, access me met le message suivant "index unique introuvable pour le champ référencé d'une table principale".

    et voilà, voilà ...

  14. #14
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    bonjour,

    si j'ai bien suivi, pour ton une intégrité référentielle, il te faut déclarer une cle primaire (sur un champ ) sur ta table principale.
    En suite tu vas indiquer la relation entre la table père et la table fille sur ce champ ( qui doit être évdiement présent dans la table attachées
    en cochant ensuite intégrité référentielle tu dois voir apparaître un 1 à côté du champ sur la table principale et un 8 couché côté table fille
    ce qui signifie que pour 1 occurrence de la table père tu auras n enregistrements côté table fille.
    ensuite cocher effacement en cascade et cela devrait rouler.....

    sinon pour répondre à l'autre question sur le positionnement du code
    Dans ton premier post
    il y a un test que tu faisais pour voir si ça répondait à la condition sinon tu affichais un message, c'est à cet emplacement que tu dois adapter ton test
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Merci Pyloupylou

    Je vais regarder tout cela à tête reposé et je te tiens courant.

    Bonne journée

  16. #16
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Bonjour Pyloupylou,

    Comme promis, je viens donner des nouvelles.

    En ce qui concerne le test, cela fonctionne. Malheureusement, ça répond à une question, mais ça en pose d'autres.

    Maintenant, en ce qui concerne l'effacement en cascade, y a problème.

    J'ai bien une base principale (accidents), qui est une base attachée et deux bases secondaires (véhicules et usagers), également attachées.
    chacune de ces bases a le même identifiant. Cette identifiant est unique dans la base accident (1 accident = 1 identifiant) sur lequel, j'ai posé une clé primaire. En ce qui concerne les bases véhicules et usagers, cet identifiant peut être multiple (donc pas possible de mettre une clé primaire), un accident peu concerné plusieurs véhicules et chaque véhicule peu avoir plusieurs occupants.

    En ce qui concerne les formulaires. J'ai un formulaire F_accident (base accident) avec un sous-formulaire F_véhicule liés par le champ identifiant (Champs fils "Id_véhicules", champ pères "Id_accident") et un sous_formulaire F_usagers dans le sous-formulaire F_véhicule liés par les champs Identifiant et Lettre_véhicule (Champs fils "Id_usager;L_véhicule", champs pères "Id_véhicules;L_véhicule").

    Et donc, quand je vais dans les relations, je n'ai pas accès à la case à cocher "Appliquer l'intégrité référentielle", ni à celle concernant l'effacement en cascade.

    Voilà ou j'en suis, si tu as une proposition à me faire, je suis preneur.

    Merci d'avance

    A+

  17. #17
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    en fait la modélisation donnerait ça.

    Nom : Capture.JPG
Affichages : 613
Taille : 25,7 Ko
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  18. #18
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Re

    Merci pour ton aide.

    En fait, l'identifiant est le même pour les trois bases (accident, véhicules et usagers). Le différenciation entre les véhicules ce fait avec l'identifiant véhicule composé d'une lettre (A, B, C, ...), donc, il y a plusieurs véhicules "A", mais un seul "A" par accident. Pareil pour l'usager. Ce dernier est lié avec le véhicule par l'identifiant accident et l'identifiant du véhicule.

    Ex : accident n° 14001 - Véhicule A - usager conducteur. Le conducteur est donc lié a l'accident n° 14001 dans le véhicule A.

    Je n'ai donc pas d'identifiant unique par véhicule.

    Voilà, voilà

    A +

  19. #19
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Citation Envoyé par Christ79 Voir le message
    Bonjour Pyloupylou

    Dans la base accident cet option est grisé et je ne peux donc pas la cocher.

    A oui, j'allais oublié. Dans un de tes précédents messages, tu me propose de modifier mon VBA par "me.<conteneur du sous écran>.form.recordset.recordcount". Excuse mon ignorance, mais tu le mets à quel niveau de la commande. Loufa me propose de la remplacer la précédente, mais la précédente quoi ?

    Merci encore pour tout.
    La précédente est celle que tu as posté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If (Forms![F_accident_consult]![F_accident_consult_véhicule]![F_accident_consult_usager]![Id_usager] <> "") _
                   And (Forms![F_accident_consult]![F_accident_consult_véhicule]![F_accident_consult_usager]![Id_usager] = _
                           Forms![F_accident_consult]![F_accident_consult_véhicule]![Id_véhicule]) Then
        MsgBox "Attention, vous n'avez pas supprimé" & Chr(13) & "tous les usagers de ce véhicule"
    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If me......form.recordset.recordcount > 0 then
    Par contre Est-ce les noms qui sont "bien" choisis pour mettre le doute ou Est-ce que tu mets une égalité entre un id usagé et un id véhicule ?

    Pourquoi ceci ne peut marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!...![Id_usager] <> ""
    1) Lorsqu'il n'y a pas de record, il n'y a "pas" de contrôle Id_usager. Donc la tester lève une erreur.
    2) S'il y a des records mais qu'hypothétiquement Id_usager n'est pas rempli, il ne sera pas "" (string vide) mais plutôt Null.

    Tu noteras que je mets ... à la place de la syntaxe fausse.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  20. #20
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    en passant bonjour Maitre Loufab...

    En fait, l'identifiant est le même pour les trois bases (accident, véhicules et usagers). Le différenciation entre les véhicules ce fait avec l'identifiant véhicule composé d'une lettre (A, B, C, ...), donc, il y a plusieurs véhicules "A", mais un seul "A" par accident. Pareil pour l'usager. Ce dernier est lié avec le véhicule par l'identifiant accident et l'identifiant du véhicule.

    Ex : accident n° 14001 - Véhicule A - usager conducteur. Le conducteur est donc lié a l'accident n° 14001 dans le véhicule A.

    Je n'ai donc pas d'identifiant unique par véhicule.
    Ca serait plus simple avec un petit schéma des tables concernées
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

Discussions similaires

  1. tester la présence d'un enregistrement
    Par patmar83 dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/05/2015, 15h14
  2. tester la présence d'enregistrements dans SQL
    Par clao260 dans le forum VBA Access
    Réponses: 4
    Dernier message: 02/06/2008, 14h23
  3. Tester la présence d'un enregistrement dans une table ?
    Par Evocatii dans le forum Requêtes
    Réponses: 5
    Dernier message: 25/02/2008, 21h02
  4. Réponses: 11
    Dernier message: 02/04/2004, 18h33
  5. jointure renvois pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/08/2002, 12h51

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