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 :

Vérification de la présence d'une string (variable) dans une table


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Alternant Ingénieur
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Alternant Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Par défaut Vérification de la présence d'une string (variable) dans une table
    Bonjour,

    Débutant en VBA sur Access, je cherche à identifier les différentes utilisateurs de ma base.
    Pour ce faire je récupère le nom de session, en ENVIRON("USERNAME"), et je vérifie s'il est déjà présent dans une table de ma bdd.

    Dans cette table de ma BDD j'ai donc le username, l'e-mail (que je demande à la première connexion), et des booléens Oui/Non pour les autorisations de ce qu'ils ont droit de faire ou non.

    J'ai du mal à réaliser la partie vérification de la présence ou non du username dans ma abse de données. Je ne comprends pas pourquoi. Voir le code ci-dessous :
    Nom : {06DB3806-FE7B-4579-8058-A1AC4674594F}.png.jpg
Affichages : 104
Taille : 20,6 Ko
    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
    Option Compare Database
     
    Function authentification_user()
    Dim string_utilisateur As String
    Dim email As String
    string_utilisateur = Environ("USERNAME")
     
     
    If EntreeExiste(string_utilisateur) = False Then
        MsgBox "Ajout de la personne"
        string_email = InputBox("Première connexion : renseignez votre adresse e-mail : ", "Première connexion")
        Set t = CurrentDb.OpenRecordset("users", DB_OPEN_DYNASET)
        t.AddNew
        t![utilisateur] = string_utilisateur
        t![email] = string_email
        t![droit_ajout] = True
        t![admin] = False
        t.Update
        t.MoveLast
    Else
        MsgBox "Existe déjà"
    End If
     
    End Function
    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
    Public Function EntreeExiste(ByVal NomEntree As String) As Boolean
     
    Dim db As Database
    Dim Rct_Dbl As Recordset
    Dim str_dbl As String
     
    Set db = CurrentDb
    str_dbl = "SELECT Users.[utilisateur]" & _
                "FROM Users" & vbCrLf & _
                "WHERE (((Users.utilisateur) = '" & NomEntree & "'))"
     
    Set Rct_Dbl = db.OpenRecordset(str_dbl)
    If Not (Rct_Dbl.BOF And Rct_Dbl.EOF) Then
        EntreeExiste = False
    Else
        EntreeExiste = True
    End If
     
    End Function
    Merci d'avance pour votre aide, j'en profite pour dire que si vous avez des bonnes vidéos/site web pour apprendre le langage SQL (qui semble indispensable pour Access) et sur l'organisation Access je suis preneur !

    James C

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    657
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 657
    Par défaut
    Bonjour,

    Pour une vérification simple comme cela utilise la fonction de domaine DLookup, tu as de nombreux exemples sur le forum.

    ONTAYG

  3. #3
    Membre averti
    Homme Profil pro
    Alternant Ingénieur
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Alternant Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Par défaut
    J'ai regardé des exemples, mais ça ne marche toujours pas, et je ne comprends toujours pas pourquoi (ni mon premier code, ni celui ci-dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function EntreeExiste(ByVal NomEntree As String) As Boolean
    On Error GoTo ErrorHandler
     
    MsgBox NomEntree
    If DLookup("[utilisateur]", "Users", "[utilisateur] =" & NomEntree) <> Null Then
        EntreeExiste = True
    End If
    Exit Function
     
    ErrorHandler:
        EntreeExiste = False
    End Function
    Ca me retourne EntreeExiste = False tout le temps, même quand dans la table il y a déjà l'utilisateur enregistré.

  4. #4
    Membre averti
    Homme Profil pro
    Alternant Ingénieur
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Alternant Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Par défaut
    Bon, j'ai toujours pas compris le pourquoi du comment mais DLookup ne renvoit pas Null lorsqu'il ne trouve pas (contrairement à tout ce que j'ai pu lire...).

    Donc j'ai bricolé un code qui marche (un peu par magie!), et qui est probablement à des années lumière de ce qu'il devrait être pour réaliser ce que je veux. Le voici :
    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
    Function authentification_user()
    Dim utilisateur As String
    Dim email As String
    Dim string_utilisateur As String
     
    string_utilisateur = Environ("USERNAME")
     
     
    If EntreeExiste(string_utilisateur) = False Then
        string_email = InputBox("Première connexion : renseignez votre adresse e-mail : ", "Première connexion")
        Set t = CurrentDb.OpenRecordset("users", DB_OPEN_DYNASET)
        t.AddNew
        t![utilisateur] = string_utilisateur
        t![email] = string_email
        t![droit_ajout] = True
        t![admin] = False
        t.Update
        t.MoveLast
    Else
    End If
     
    End Function
     
    Public Function EntreeExiste(NomEntree) As Boolean
     
    If DLookup("[utilisateur]", "Users", "[utilisateur] ='" & NomEntree & "'") = NomEntree Then
        EntreeExiste = True
        Exit Function
    Else
        EntreeExiste = False
    End If
    End Function

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    Citation Envoyé par James C Voir le message
    Bon, j'ai toujours pas compris le pourquoi du comment mais DLookup ne renvoit pas Null lorsqu'il ne trouve pas (contrairement à tout ce que j'ai pu lire...).
    le Null ne se teste pas par comparaison (=, <>, > ...) mais par son existence avec Isnull:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNull(DLookup("[utilisateur]", "Users", "[utilisateur] =" & NomEntree)) Then
    Donc j'ai bricolé un code qui marche (un peu par magie!)
    ce n'est pas par magie, tu as juste testé l'égalité au lieu de l'existence de Null

    sinon pour éviter de tester le Null, autant le faire disparaitre avec Nz (grâce au vide: vbNullString ou ""):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Nz(DLookup("[utilisateur]", "Users", "[utilisateur] =" & NomEntree) , "") <> vbNullString Then
        EntreeExiste = True
    ou également en accolant le résultat avec du vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DLookup("[utilisateur]", "Users", "[utilisateur] =" & NomEntree) & "" <> "" Then

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

Discussions similaires

  1. [PHP 7] présence d'une valeur dans plusieurs tables MySQL
    Par laurentSc dans le forum Langage
    Réponses: 11
    Dernier message: 09/02/2020, 17h11
  2. [MySQL] Vérification de la présence de la donnée dans la table
    Par amerex dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/12/2008, 00h04
  3. [MySQL] Vérification de la présence d'une donnée déficiente
    Par sanaa16 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/06/2008, 01h17
  4. Réponses: 9
    Dernier message: 08/01/2008, 13h58
  5. problem avec la recherche d'une valeur dans les table
    Par anilane dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/05/2007, 19h35

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