ADO VB6

Résolu
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 - 23 août 2005 à 18:46
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 - 25 août 2005 à 11:57
Salut...

Je fais une Recherche avec une BD ACCESS et ca me sort cette erreur

Erreur d'éxécution '-2147217900 (80040e14)';

Erreur de syntaxe (opérateur absent) dans l'expression '[cad] like '137-1' AND [nomcad] like 'Paroisse de Saint-Jacques-de-l'Achigan".

Voici ma ligne de code qui bug
BD2.Open "SELECT * FROM [FOLIO_CADASTRE] WHERE [cad] like '" & txtRecherche.Text & "' AND [nomcad] like '" & txtParoisse.Text & "'", Connection, adOpenKeyset, adLockBatchOptimistic


Je ne comrpend pas pourquoi ca bug....

Si quelqu'un peut m'aider

merci d'avance

7 réponses

Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
24 août 2005 à 19:05
Salut,


Il te manque un & de concaténation si tu utilises _ pour indiquer que le code continu à la ligne suivante :

"... [FOLIO_CADASTRE] ce code " & _

& " WHERE







Oui dans ce cas = est mieux adapté.







pour les replace, c'est normal :



Faut remplace au sein d'une chaine tous les ' par \' ou par '' (deux simples quote)

Bon par contre perso je laisse les \ comme ça



Plus précisement, pour ne pas m'y perdre j'utilise la fonction TXTVersSQL qui formatte un champ texte pour le passer dans une requête SQl:




Function TXTVersSQL(message As String) As String

message = Replace(message, "'", "''")

TXTVersSQL = "'" & message & "'"

End Function




utilisation :




sql = "SELECT * FROM table WHERE prenom=" & TXTVersSQL(txtPrenom.text) & ";"



++

Zlub
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 août 2005 à 19:10
Salut JeffC1977
Alors, ça avance ce moteur de recherche ?
Ton erreur est normale : Dans la chaine que tu cherches, il y a le caractère '
Donc, SQL s'y perd puisqu'il y a 3 (impair) ' sur la même ligne.
Pour faire ta recherche, il faut que tu retravailles ta chaine avant de la donner à SQL :
nomCadàChercher = txtParoisse.Text
' Remplacer les ' par des \' :
nomCadàChercher = Replace(nomCadàChercher, "'", "\'")
' Remplacer les \ par des \\ :
nomCadàChercher = Replace(nomCadàChercher, "", "\")

BD2.Open "SELECT * FROM [FOLIO_CADASTRE] " & _
"WHERE [cad] like '" & txtRecherche.Text & "' " & _
"AND [nomcad] like '" & nomCadàChercher & "'", _
Connection, adOpenKeyset, adLockBatchOptimistic

D'autre part, je te rappelle que la syntaxe propre d'un Like en SQL doit comporter des % devant et derrière pour que la recherche se fasse sur n'importe quelle partie du texte, comme ceci :
BD2.Open "SELECT * FROM [FOLIO_CADASTRE] " & _
"WHERE [cad] like '" & txtRecherche.Text & "' " & _
"AND [nomcad] like ' % " & nomCadàChercher & "%'", _
Connection, adOpenKeyset, adLockBatchOptimistic

Sinon, utilise = à la place de Like

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
23 août 2005 à 19:42
Salut,

Ben moi je dirais :

BD2.Open "SELECT * FROM [FOLIO_CADASTRE] WHERE [cad] like '" & replace(txtRecherche.Text, "'", "''") & "' AND [nomcad] like '" & replace(txtParoisse.Text, "'", "''" & "'", Connection, adOpenKeyset, adLockBatchOptimistic

Explik : quand il y a une quote dans un nom saisi, il faut la remplacer par 2 quotes pour que sql le comprenne.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
24 août 2005 à 00:25
Salut,

C'est clair que LIKE doit être utilisé avec % comme carractere jocker.



Ensuite faut protéger les carractere les imple quote qui pourraient
trainer dans la chaîne ... soit avec \' soit en les doublant à l'aide
de replace(string, chaineAChercher, chaineRemplacement) et pareil pour
les \ ...



Donc en gros, à peu de chose pres la version de jack devrai résoudre ton pb.


++

Zlub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
24 août 2005 à 18:54
Salut Jack.. et bien oui ca l'avance mon moteur de recherche.... plutôt.. je dirais que ca fais hum 3-4 programmes que j'ai fais mais je ne saisi pas encore tout ce que je fais... en particulier j'ai énormément de la difficulté avec le SQL.... C'est encore du Chinois pour mois...(en partie)

Bon, j'ai regarder ton message et j'ai fais quelque test...

Voilà la ligne de ocde que j'avais dans mon premier message
BD2.Open "SELECT * FROM [FOLIO_CADASTRE] WHERE [cad] like '" & txtRecherche.Text & "' AND [nomcad] like '" & txtParoisse.Text & "'", Connection, adOpenKeyset, adLockBatchOptimistic

J'ai commencé par modifier ma ligne de ocde comme la tienne.. Donc j'ai ajouter après [FOLIO_CADASTRE] ce code " & _" WHERE.... et ca plante...
Ca me dit qu'il y a une caractère incorrecte (le caractère _) .

Et deuxièmement il y a quelque chose que je ne saisi pas.... tu me dit de remplacer mon txtParoisse.Text par Replace (txtParoisse, "'", "\'") bon Ok... mais dans ton message tu me dit après de remplacer txtParsoisse par Replace(txtParoisse, "", "\")

Je ne sais pas... :(

Peux-tu me le montrer dans une ligne de code... STP

En passant merci pour le Like... Je ne savais pas trop à quoi ca servait.... mais je ne veux pas mettre de % car iol doit trouver absolument ce que j'Minscrit dans mon txtbox alors je vais mettre un =

J'attends de tes nouvelles...

merci d'avance
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
24 août 2005 à 22:09
C'est encore moi...

Et bien je m'y perd la tête :(.....

Voilà ce que j'ai essayer et ca Bug toujours...

Test No 1

Dim NomCadàChercher As Variant

NomCadàChercher = txtParoisse.Text
' Remplacer les ' par des \' :
NomCadàChercher = Replace(NomCadàChercher, "'", "\'")
' Remplacer les \ par des \\ :
NomCadàChercher = Replace(NomCadàChercher, "", "\")



BD2.Open "SELECT * FROM [FOLIO_CADASTRE] WHERE [cad] = '" & txtRecherche.Text & "' AND [nomcad] = '" & NomCadàChercher & "'", Connection, adOpenKeyset, adLockBatchOptimistic


Test No 2

Function TXTVersSQL(message As String) As String
message = Replace(message, "'", "''")
TXTVersSQL = "'" & message & "'"
End Function

ET DANS MON BOUTON RECHERCHE

BD2.Open "SELECT * FROM [FOLIO_CADASTRE] WHERE [cad] = '" & txtRecherche.Text & "' AND [nomcad] = '" & TXTVersSQL(txtPrenom.text) & "'", Connection, adOpenKeyset, adLockBatchOptimistic


Est ce que mon code est Ok... Mon roblème peut-il venir de ma base de Données ???


J'ai essayé également le code pour changer de ligne et ca bug aussi décidemment ca ne va pas aujourd'hui :(


BD2.Open "SELECT * FROM [FOLIO_CADASTRE]" & _
& " WHERE [cad] = '" & txtRecherche.Text & "'" & _
& " AND [nomcad] = '" & NomCadàChercher & "'", Connection, adOpenKeyset, adLockBatchOptimistic

Au secours... J'aurais donc encore besoin d'un peu d'aide....


Merci d'avance
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
25 août 2005 à 11:57
Salut,

dans le test 2 c'est normal que ça plante ... faut remplacer txtPrenom.text
par la variable ou le txtbox qu'il convient ... C'est pas magic, si
rien ne correspond à txtPrenom, ta requête ne vas pas tourner toute
seule.

et faut pas mettre de quote avec txtVersSQl puique ça le fai tout seul donc :




"SELECT * FROM [FOLIO_CADASTRE] WHERE [cad] = " &
TXTVersSQL(txtRecherche.Text) & " AND [nomcad] = " &
TXTVersSQL(txtParoisse.text) ,Connection, adOpenKeyset, adLockBatchOptimistic




NomCadàChercher as String c'est suffisant pas besoin de Variant.





Quand tu dis que ça bug, ça veut tout dire et rien dire à la fois ...
Tu peux nous détailler le pb .... T'as un msg d'erreur, ça ne fait rien
... Il se passe quoi ?






++

Zlub
0
Rejoignez-nous