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:
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:
tblTCL.FindFirst strCritere
et dit :
Citation:
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:
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 ? :roll: