VB6 : Pb avec requete sql pourtant simple ! [Résolu]

mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 14 mai 2006 à 14:54 - Dernière réponse : cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention
- 14 mai 2006 à 16:49
Salut à tous !

J'ai un ch'ti problème avec une requête qui marche 1 fois sur 2 ??

J'ai une bdd Access nommée "TMD"
Exemple des 2ères entrées :
* Champs 1 (NomProduit)
1/ ACETYLENE DISSOUS
2/ AIR COMPRIME contenant au plus 23,5 pour cent d'oxygène, par volume
* Champs 2 (CodeDanger)
1/ 239
2/ 20
* Champs 3 (CodeMatiere)
1/ 1001
2/ 1002
_______________________________________________________________________________Puis dans VB, j'ai un Module(RefNico) et une Form(frmCodes) :
lbxNomProduits c'est une ListBox, reprenant tout mes produits (y'en a 1924)

Module :
Public NomBase As String, db As Database

Form:
Private Sub lbxNomProduits_Click()
Dim NomProduitU As String
NomProduitU = Me.lbxNomProduits
Me.lblNomProduit.Caption = NomProduitU

Dim Rs As Recordset, sql As String
Dim NbNomProduits As Integer

NomBase = App.Path & "\TMD"

Set db = DBEngine.Workspaces(0).OpenDatabase(NomBase)

sql = "SELECT CodeDanger, CodeMatiere FROM ListeProduit WHERE NomProduit='" & NomProduitU & "'"

Set Rs = db.OpenRecordset(sql)
Me.lblCodeDanger.Caption = Rs!CodeDanger
Me.lblCodeMatiere.Caption = Rs!CodeMatiere
Rs.Close
db.Close
End Sub

Le problème :
quand je clique sur "ACETYLENE DISSOUS", aucun problème de recherche, j'ai bien mon code mdanger et matière qui sont trouvés, par contre,
Si je clique sur "AIR COMPRIME contenant au plus 23,5 pour cent d'oxygène, par volume", cette ligne se met en jaune :
Set Rs = db.OpenRecordset(sql)

et j'ai le message suivant :
Erreur d'execution '3075':
Erreur de syntaxe (Opérateur absent) dans l'expression 'NomProduit='AIR COMPRIME contenant au plus 23,5 pour cent d'oxygène, par volume".

Si quelqu'un à la solution, merci

Mortalino

PS : Ca marche sur certains produits et PAS sur d'autres.
Afficher la suite 

5 réponses

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 14 mai 2006 à 15:51
3
Merci
Salut
Regarde ta syntaxe telle que tu l'as donnée dans ton message d'erreur :
Les champs texte sont encadrés par des apostrophes --> Nom = 'contenu cherché'
Si, dans le contenu d'un texte, il y a un ou plusieurs signes apostophes ', la syntaxe devient fausse.
Il suffit donc de trafiquer le contenu des champs. Cette simple instruction de doublage des ' suffira :
sql = Replace(NomProduitU, "'", "''")
sql = "SELECT CodeDanger, CodeMatiere FROM ListeProduit WHERE NomProduit='" & sql & "'"

Pendant que tu es dans les corrections, "dissous" s'écrit "dissout".

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Clad49 265 Messages postés dimanche 3 août 2003Date d'inscription 29 mars 2010 Dernière intervention - 14 mai 2006 à 15:03
0
Merci
Salut !

Peut être que la clé que tu recherche est trop long ou kil n'aime pas les "," !
Tu peut éssayer de créé une clé unique (par exemple un chanp id en auto incrémentation)

ps :
Public db As Database
Public rs As Recordset

Clad
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 14 mai 2006 à 15:26
0
Merci
J'ai, comme tu dis, l'impression qu'il plante sur des nom trop long, ou lorsqu'il y a des "," ou des "°" dans le texte.

Effectivement j'ai les numéros automatiques incrémentés.
Comment lui dire en sql de me récupérer les infos par ce numéro ?

SELECT CodeDanger, CodeMatiere FROM ListeProduit WHERE ????
que dois je mettre pour le numéro de clée ?

Merci clad49.

Mortalino
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 14 mai 2006 à 16:14
0
Merci
Merci Jack,

c'est nickel. Je me disais bien que dans le message d'erreur il y avait un problème dans le placement des apostrophes, alors que ca marchait sur d'autres.

Donc, merci de résoudre mon prob.

Pour info, "dissous" s'écrit bien comme ça, j'ai vérifié sur Google par acquis de conscience mais merci quand même (tant qu'à faire une appli, autant que l'hortographe soit bon).

++
Mortalino
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 14 mai 2006 à 16:49
0
Merci
Bien sûr dissous existe : Tu dissous
Mais un produit dissout, avec un t (de la soude dissoute, et pas dissouse)
à moins que ce soit un terme dédié

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.