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 :

Erreur 3070 - problème de syntaxe sur la fonction FindFirst ou FindLast [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur process
    Inscrit en
    Mars 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Erreur 3070 - problème de syntaxe sur la fonction FindFirst ou FindLast
    Bonjour à tous,

    J'ai un problème de syntaxe dans l'utilisation de la fonction FindFirst (ou FindLast ou autre Find...).
    J'ai une table [T_CHECK-LIST], avec deux champs [C-L_CHAMP1] et [CL_CHAMP2] identiques. Lorsque j'utilise la fonction FindFirst pour trouver un enregistrement dans le champ C-L_CHAMP1, le code suivant me renvoie une erreur
    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
    Sub testRecordExist()
     
    Dim dbThisDB As DAO.Database 'Cette base de données
    Dim tblTCL As DAO.Recordset 'Table T_CHECK-LIST
    Dim strEnr As String 'Enr1
    Dim strCritere As String
     
        'On Error GoTo errHandler
        strEnr = "EnregistrementTest"
     
        Set dbThisDB = CodeDb 'Définition de cette BDD
        Set tblTCL = dbThisDB.OpenRecordset("T_CHECK-LIST", dbOpenDynaset) 'Définition de la table "T_CHECK-LIST"
        strCritere = "C-L_CHAMP1 LIKE " & Chr(34) & strEnr & Chr(34)
        tblTCL.FindFirst strCritere
        MsgBox tblTCL.NoMatch
     
    errHandler:
        tblTCL.Close
        dbThisDB.Close
        Set tblTCL = Nothing
        Set dbThisDB = Nothing
    End Sub
    Le message d'erreur est sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tblTCL.FindFirst strCritere
    et dit :
    Erreur d'exécution '3070' :

    Le moteur de la base de données Microsoft Access ne reconnaît pas
    « C » en tant que nom de champ ou expression correcte.
    Je me suis pas mal pris la tête sur ce problème, j'ai cherché dans le forum, notamment
    https://www.developpez.net/forums/d1...070-findfirst/
    https://www.developpez.net/forums/d5...axe-findfirst/
    ainsi que dans la cours sur DAO, et ailleurs sur le net, mais sans succès.

    Je me suis rendu compte que le problème vient du " - " ("tiret du 6" ou "moins") entre le "C" et le "L" du nom du champ [C-L_CHAMP1], mais je n'ai pas trouvé comment le résoudre. J'ai essayé avec des chr(34) pour ", chr(45) pour -, mais rien n'y a fait.

    Finalement, j'ai changé le nom du champ pour retirer le "-", et le code suivant fonctionne très bien :
    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
    Sub testRecordExist()
     
    Dim dbThisDB As DAO.Database 'Cette base de données
    Dim tblTCL As DAO.Recordset 'Table T_CHECK-LIST
    Dim strEnr As String 'Enr1
    Dim strCritere As String
     
        'On Error GoTo errHandler
        strEnr = "EnregistrementTest"
     
        Set dbThisDB = CodeDb 'Définition de cette BDD
        Set tblTCL = dbThisDB.OpenRecordset("T_CHECK-LIST", dbOpenDynaset) 'Définition de la table "T_CHECK-LIST"
        strCritere = "CL_CHAMP2 LIKE " & Chr(34) & strEnr & Chr(34)
        tblTCL.FindFirst strCritere
        MsgBox tblTCL.NoMatch
     
    errHandler:
        tblTCL.Close
        dbThisDB.Close
        Set tblTCL = Nothing
        Set dbThisDB = Nothing
    End Sub
    Donc le problème vient bien de la syntaxe et du "-", mais je ne comprends pas comment l'éviter sans supprimer ce "-" du nom de mon champ.

    Quelqu'un a-t-il une idée s'il vous plaît ? Quel est le problème avec le "-" ? et comment l'éviter ?

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 629
    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 629
    Points : 14 595
    Points
    14 595
    Par défaut
    bonsoir,
    le tiret (-) est un caractère réservé car utilisé pour les opérations de soustraction (et pas que dans Access, d'ailleurs). Le plus simple serait de ne pas utiliser ce genre de caractère pour le nommage d'objets.
    Pourquoi ne pas avoir continué à utiliser le souligné (_) ?
    Sinon cela oblige à utiliser les crochets [] dans le code pour éviter les erreurs.
    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
    Membre à l'essai
    Homme Profil pro
    Ingénieur process
    Inscrit en
    Mars 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Bonjour tee_grandbois, et merci pour ta réponse.

    En fait, j'avais mis des "-" dans le nom de mes champs car je ne savais pas que ces "-" pouvaient avoir un impact par la suite.

    J'ai essayé avec des [ ] autour du champs [C-L_CHAMP1] et ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCritere = "[C-L_CHAMP1] LIKE " & Chr(34) & strEnr & Chr(34)
    Curieux, il me semble que j'avais déjà essayé les [ ], et ça n'avait pas fonctionné, j'avais dû faire une autre erreur de syntaxe...

    Merci beaucoup tee_grandbois !

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

Discussions similaires

  1. Problème de syntaxe sur un TRIGGER (erreur 1064)
    Par Tchupacabra dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 08/04/2009, 14h47
  2. Problème de syntaxe sur mes fonctions
    Par kippix dans le forum Administration système
    Réponses: 2
    Dernier message: 06/04/2009, 20h15
  3. erreur syntaxe sur une fonction pow
    Par superyoury dans le forum C
    Réponses: 3
    Dernier message: 10/06/2007, 18h16
  4. [MySQL] problème de syntaxe sur la récupération des données
    Par soshin dans le forum PHP & Base de données
    Réponses: 28
    Dernier message: 23/11/2006, 12h34
  5. Réponses: 16
    Dernier message: 15/05/2006, 14h49

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