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 :

Problème de test sur plusieurs champs dans une table [AC-2003]


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 21
    Points : 24
    Points
    24
    Par défaut Problème de test sur plusieurs champs dans une table
    Bonjour à tous,

    j'ai un problème lorsque je veux faire un contrôle entre deux champs d'un formulaire de création et la table où doit-être inséré les nouvelles données.
    En fait, je contrôle que la personne n'existe pas dans la base, en faisant un test sur son Nom et sa date de naissance.
    Je test les champs suivant:

    Le champ "nom" table OPF_T_Debiteur ---> champ Debiteur_C_Nom ---> sous format texte

    Le champ "date de naissance" table OPF_T_Debiteur ---> champ Debiteur_D_DateNaissance ---> sous format Date/heure

    Voici le code pour le teste...

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Dim Resultat1 As Integer
        Dim Resultat As Integer
        Dim db As Database
        Dim rs As Recordset
        Dim StrSQL As String
     
        StrSQL = "OPF_T_Debiteur"
        Set db = CurrentDb()
        Set rs = db.OpenRecordset(StrSQL)
     
     
        rs.Index = "Debiteur_C_Nom"
        rs.Seek "=", Debiteur_C_Nom
     
            If rs.NoMatch = True Then
                Resultat = 0
            Else
                Resultat = 1
            End If
     
        rs.Index = "Debiteur_C_NumdebGIOP"
        rs.Seek "=", Debiteur_C_NumdebGIOP
     
            If rs.NoMatch = True Then
                Resultat1 = 0
            Else
                Resultat1 = 1
            End If
     
     
        If Resultat = 1 And Resultat1 = 0 Then
     
            Dim Reponse1
            Reponse1 = MsgBox("Un débiteur porte le même Nom, mais n'a pas le même numéro d'identification dans la base de données... voulez vous continuer:", vbYesNo)
     
                If Reponse1 = vbNo Then
                    Exit Sub
                Else
                    Module6.AdressePremiereInscription = 1
                    Module4.VarNouveauDebiteur = 2
                    Module2.VarNumGiopDeb = Debiteur_C_NumdebGIOP
                    Module1.VarNomDebiteurNouvelleArchivage = Debiteur_C_Nom
     
                    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
                    DoCmd.OpenForm "OPF_F_NouvelleDonneeArchivage", acNormal
                    DoCmd.Close acForm, "OPF_F_NouveauDebiteur"
                End If
     
        ElseIf Resultat = 1 And Resultat1 = 1 Then
     
            Dim Reponse2
            Reponse2 = MsgBox("Un débiteur porte le même Nom et a le même numéro d'identification qu'un débiteur déjà présent dans la base de données... voulez vous continuer:", vbYesNo)
     
                If Reponse2 = vbNo Then
                    Exit Sub
                Else
                    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
                    Module6.AdressePremiereInscription = 1
                    Module4.VarNouveauDebiteur = 2
                    Module2.VarNumGiopDeb = Debiteur_C_NumdebGIOP
                    Module1.VarNomDebiteurNouvelleArchivage = Debiteur_C_Nom
                    DoCmd.OpenForm "OPF_F_NouvelleDonneeArchivage", acNormal
                End If
     
        Else
             Module6.AdressePremiereInscription = 1
             Module4.VarNouveauDebiteur = 2
             Module2.VarNumGiopDeb = Debiteur_C_NumdebGIOP
             Module1.VarNomDebiteurNouvelleArchivage = Debiteur_C_Nom
     
             DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
             DoCmd.OpenForm "OPF_F_NouvelleDonneeArchivage", acNormal
             DoCmd.Close acForm, "OPF_F_NouveauDebiteur"
        End If
    Quand je rentre un débiteur qui existe déjà, voici le message d'erreur qui ressort du code qui est exécuté:

    Erreur d'exécution "3800"
    'Debiteur_D_DateNaissance n'est pas un index de cette table'

    voilà la ligne ou il signale l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.Index = "Debiteur_C_NumdebGIOP"
    J'ai contrôlé les paramètres dans la table concernant ce champ,
    Il est indexé avec doublons autorisés.
    Il exécute sans problème le premier test sur le champ "Debiteur_C_Nom", mais il butte sur le deuxième test sur le champ "Debiteur_D_DateNaissance"

    Si j'essaye un test uniquement sur le champ 'Debiteur_D_DateNaissance' (je supprimer le test sur le champ Debiteur_C_Nom), c'est le même problème, il me signale l'erreur. Même problème avec d'autres champ de la table. Cela fonctionne uniquement avec le champ 'Debiteur_C_Nom'.

    Pouvez-vous me dire se qui pourrait clocher...

    Je vous remercie déjà infiniment pour vos éclairage sur la question.

    Avec mes meilleurs messages.

    Sylvain

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 283
    Points
    34 283
    Par défaut
    Salut,

    pour ton test d'existence, je te proposerai une syntaxe plus elaboree mais plus directe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Dcount("Debiteur_C_Nom","OPF_T_Debiteur","Debiteur_C_Nom='" & Debiteur_C_Nom & "' and Debiteur_D_DateNaissance=#" & format(Debiteur_D_DateNaissance ,"MM/DD/YYYY") & "#")=0 then
    msgbox "pas encore d'insert"
    Else
    msgbox "existe déjà"
    End if
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

Discussions similaires

  1. trigger sur plusieurs champs d'une table
    Par PxPar dans le forum PL/SQL
    Réponses: 1
    Dernier message: 27/08/2009, 15h31
  2. Test sur un champ dans une requete
    Par zico_pro dans le forum SQL
    Réponses: 7
    Dernier message: 18/06/2008, 14h18
  3. [HTML] mettre un DIV sur plusieurs champs d'une table
    Par Nixar dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/09/2007, 15h13
  4. Effacer plusieurs champs dans une table
    Par kurkaine dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/08/2006, 08h22
  5. Problème d'UPDATE sur un champ d'une table MyISAM
    Par alouette dans le forum Requêtes
    Réponses: 6
    Dernier message: 13/07/2006, 20h17

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