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 :

verifier valeur existante dans une table


Sujet :

VBA Access

  1. #1
    Invité
    Invité(e)
    Par défaut verifier valeur existante dans une table
    bonjour à tous,

    j'ai ce code dans un form pour vérifier si le nom d'une machine est bien répertorié dans une table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim strCritere As String
    strCritere = Environ("computername")
    Recordset.FindFirst strCritere
    If Recordset.NoMatch Then
    MsgBox "test machine invalide"
    End If
    Le nom de ma machine est "SAMSUNG-Q310" et est bien dans la table de référence.
    J'obtiens une erreur 3070 qui me dit que "le moteur de base de données microsoft jet ne reconnait pas "SAMSUNG" en tant que nom de champ ou expression correcte."


    pourquoi n'ai-je que la moitié du nom machine reconnu ?

  2. #2
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 118
    Points : 1 615
    Points
    1 615
    Par défaut
    mets le nom entre crochets. S'il y a un espace par exemple, la 2eme partie est tronquée. Fais un test sur un nom sans tiret et sans espace par exemple.

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai changé mon nom de machine en supprimant le tiret, j'ai la même erreur, mais le nom machine est complet.

    Et puis j'ai teste comme ça, en passant pas un champ indépendant qui me permet de vérifier le nom de ma machine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Form_Open(Cancel As Integer)
     
    CritereMachine = Environ("computername")
    RecordSource = "SELECT * FROM machines ;"
    Dim strCritere As String
    strCritere = [CritereMachine]
    Recordset.FindFirst strCritere
    If Recordset.NoMatch Then
    MsgBox "test machine invalide"
    End If
     
    End Sub
    Malheureusement même erreur bien que le nom machine soit complet.

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 652
    Points : 34 358
    Points
    34 358
    Par défaut
    salut,
    ta syntaxe est mauvaise, dans la mesure où ton Find doit atteindre un enregistrement qui répond au critère, exemple (avec ADODB) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RS.Find "NM_CTRL='" & tmpqry.Name & "'"
    donc pour ton cas, tu dois avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCritere = "nommachine ='" & CritereMachine & "'"

  5. #5
    Invité
    Invité(e)
    Par défaut
    avec cette solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CritereMachine = Environ("computername")
    RecordSource = "SELECT * FROM machines ;"
    Dim strCritere As String
    strCritere = "' & CritereMachine & " '"
    Recordset.FindFirst strCritere
    If Recordset.NoMatch Then
    MsgBox "test machine invalide"
    End If
    j'ai erreur d'éxecution 3077, erreur de syntaxe dans la chaine dans l'expression qui pointe sur "Recordset.FindFirst strCritere"

  6. #6
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 118
    Points : 1 615
    Points
    1 615
    Par défaut
    En VBA, lorsque je fais une recherche sur un recordset de type chaîne, je fais toujours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ....& Chr(34) & maChaine & Chr(34) &....
    Chr(34) est le code du guillemet.
    De la même façon, lorsqu'il s'agit d'une date je fais
    Chr(35) est le code de #

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CritereMachine = Environ("computername")
    RecordSource = "SELECT * FROM machines ;"
    Dim strCritere As String
    strCritere = "& Chr(34) & CritereMachine & " & Chr(34) & ""
    Recordset.FindFirst strCritere
    If Recordset.NoMatch Then
    MsgBox "test machine invalide"
    End If
    j'ai : erreur de syntaxe (opérateur absent) dans l'expression

  8. #8
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 118
    Points : 1 615
    Points
    1 615
    Par défaut
    erreur dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCritere = "& Chr(34) & CritereMachine & Chr(34) & ""

  9. #9
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    dans le critère, il faut le champ sur lequel porte la recherche comme l'a indiqué jpcheck
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strCritere = "[NomMachine] = " & Chr(34) & CritereMachine & Chr(34) & ""

  10. #10
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 118
    Points : 1 615
    Points
    1 615
    Par défaut
    je n'avais (navet) corrigé que l'erreur de syntaxe (& ") en trop. A plusieurs, on va arriver à le dépanner

  11. #11
    Invité
    Invité(e)
    Par défaut
    bonjour Helas,
    oui effectivement j'ai testé cette ligne mais ça ne marche pas. Ceci dit je ne comprends pas pourquoi rajouter ce [NomMachine] = puisqu'on attribue le nom de la machine à la variable strCritere, non ?
    Y'a un truc qui m'échappe là.
    Fichiers attachés Fichiers attachés

  12. #12
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 118
    Points : 1 615
    Points
    1 615
    Par défaut
    Il me semble que ta base est vide. Il n'y a aucun objet.

  13. #13
    Invité
    Invité(e)
    Par défaut
    il y a une table et un form mais qui doivent etre en mode masqué...
    voilà c'est corrigé;
    Fichiers attachés Fichiers attachés

  14. #14
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 118
    Points : 1 615
    Points
    1 615
    Par défaut
    Patrick,

    "SAMSUNG-Q310" n'est pas dans ta table. (ref ton 1er post)

    Dans tes noms de champs, évite absolument le caractère °
    Mets "Num, N, Numero, Nb" mais pas "N°"

  15. #15
    Membre actif Avatar de psykodumarteau
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    j'utilise un code qui fait ce que tu cherches à faire. je te le met au cas ou cela puisse t'aider.

    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
    Private Sub BtnConnexion_Click()
        Dim DB As Database
        Dim rec As recordset
     
     'connection a la base et initialisation du recordset
     Set DB = CurrentDb
     Set rec = DB.OpenRecordset("Utilisateurs", dbOpenTable)
     
     'verifie que l'ordinateur n'est dans la base
     rec.Index = "Ordinateur"
     rec.Seek "=", TrouveMonOrdi
     If Not rec.NoMatch Then
        rec.Edit
        rec![Ordinateur] = ""
        rec.Update
     End If
     
     'recherche de l'utilisateur selection dans le recordset
     rec.Index = "primaryKey"
     rec.Seek "=", Me.LstBoxUtilisateur
     
     'verification de l'utilisateur
     If rec.NoMatch Then
     MsgBox "Pas d'utilisateur selectionné"
     Exit Sub
     End If
     
     'verification du mot de passe, enregesitre le PC utilisé et ouvre le formulaire Recherche NC
     If Me.TxtPassword = rec![mot de passe] Then
        rec.Edit
        rec![Ordinateur] = TrouveMonOrdi
        rec.Update
        DoCmd.Close
        DoCmd.OpenForm "Menu_Principal"
     'Sinon affiche un message d'erreur
     Else: MsgBox "mot de passe incorrect"
     End If
     
    rec.Close
    DB.Close
     
    End Sub
    la fonction TrouveMonOrdi retourne le nom du pc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Function TrouveMonOrdi() As String
        Dim strComputerName As String
        Dim strUserName As String
     
     
    strComputerName = Environ("COMPUTERNAME")
    strUserName = Environ("USERNAME")
     
     
    TrouveMonOrdi = strComputerName
    End Function

Discussions similaires

  1. Remplacer une valeur existante dans une table
    Par bernardmichel dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 28/09/2007, 09h07
  2. remplacer les valeurs nulles dans une table
    Par jessy212 dans le forum Access
    Réponses: 4
    Dernier message: 28/08/2006, 13h22
  3. Réponses: 3
    Dernier message: 14/08/2006, 21h27
  4. Eviter l'ajout de données existantes dans une table
    Par Tatoine dans le forum Access
    Réponses: 6
    Dernier message: 05/07/2006, 15h21
  5. test d'une valeur stocké dans une table
    Par EssaiEncore dans le forum ASP
    Réponses: 3
    Dernier message: 18/02/2005, 11h39

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