Soucis avec une Requette SQL en VB

Résolu
Yseno Messages postés 11 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 30 juillet 2004 - 29 juil. 2004 à 12:42
Yseno Messages postés 11 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 30 juillet 2004 - 30 juil. 2004 à 16:13
Salut à tous,

J'espère que vous allez pouvoir m'aider par ce que cela fait 2 jours que je suis dessus et je n'y arrive pas...

Voilà mon soucis :

J'aimerai faire une recherche dans deux tables, une VENDEUR et l'autre BIENS. L'utilisateur doit rentrer le nom du vendeur dans un text box et en théorie tous les vendeurs portant ce nom doivent s'afficher. et la patatra tous les vendeurs s'affiche.

Voici mon code :

' Récupération du nom du client pour construire
' une requête d'affichage des devis en cours

Dialog1.Show vbModal
DevisIdent = Dialog1.txtIdent

' Construction de la requête

MaRequete = "SELECT "

MaRequete = MaRequete & "BIENS.BNO as NUMN BIENS ,"
MaRequete = MaRequete & "VENDEUR.VENNO as NUMN VENDEUR ,"
MaRequete = MaRequete & "VENDEUR.VENNOM as NON ,"
MaRequete = MaRequete & "VENDEUR.VENPRE as NOM ,"
MaRequete = MaRequete & "FROM VENDEUR,BIENS "MaRequete MaRequete & "where VENDEUR.VENPRE "
MaRequete = MaRequete & DevisIdentMaRequete MaRequete & "and ((VENDEUR.VENNOM) DERMI ) "
End If

With Data1
.RecordSource = MaRequete
'.Refresh
End With

MSFlexGrid1.Visible = True
Label1.Visible = True

[black]
Si je ne met pas le .refresh en commentaire dans l'instruction with data eh bien j'ai une erreur 3141 me disant que refresh est mal orthographié.

voilà j'espère avoir été clair,

PS: je suis débutant donc désolés si le code est un peu lourd ;)

16 réponses

radhouene Messages postés 13 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 19 août 2004
29 juil. 2004 à 14:50
pour avoir tous les vendeurs portant le nom radhouene par exemple:

Dim con As ADODB.Connection
Dim com As ADODB.Command
Dim rs As ADODB.Recordset
Dim sql As String

sql = "select nom from vendeur where vendeur.nom='" & textbox1.text & "'"
Set con = New ADODB.Connection
Set com = New ADODB.Command
Set rs = New ADODB.Recordset

con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=chemin de la base de données;Persist Security Info=False"
con.CursorLocation = adUseClient
con.Open

com.ActiveConnection = con
com.CommandType = adCmdText
com.CommandText = sql

rs.ActiveConnection = con
rs.CursorLocation = adUseClient
rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic
rs.Open sql, con, adOpenDynamic, adLockOptimistic, adCmdText

rs.MoveFirst

set datagrid1.recordsource=rs
3
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
29 juil. 2004 à 22:56
La requête sous SQL affiche tous les vendeurs, c'est normal tu n'as pas mis de clause WHERE dans la requête que tu as retranscrite.

La requête VB est fausse quand à elle, il y a une quote devant le WHERE qui n'a rien à faire là

MaRequete = MaRequete & "VENDEUR.VENNO ," 
MaRequete = MaRequete & "VENDEUR.VENOM ," 
MaRequete = MaRequete & "VENDEUR.VENPRE ,"
MaRequete = MaRequete & "FROM VENDEUR "MaRequete MaRequete & "WHERE ((VENDEUR.VENOM) 'DERMI' ) "
3
Yseno Messages postés 11 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 30 juillet 2004
30 juil. 2004 à 16:13
Ca y est c'est bon j'ai un ami qui a trouvé, et aussi grace à votre aide.

Le soucis qu'il y avait c'était la "VIRGULE" juste après VENDEUR.VENPRE, elle était en trop.

Avoir bloqué pour cette virgule pendant plusieurs jours, les boules, mais c'est ça les joies de la programmation non ?

En tout cas MERCI à TOUS.... 8-)
3
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
29 juil. 2004 à 12:49
Tu affiche Dialog1 en modal, donc quand tu en sors, et que la ligne "DevisIdent = Dialog1.txtIdent" est executer, Dialog1 n'est plus en mémoire, donc VB en recharge une nouvelle isntance, mais les renseignements que ton utilisateurs avait saisis sont perdu !!! Pour t'en sortir. Ajoute une variable public dans un module standard :
Public DevisIdentSaisie As String
Dans l'EVT Query_Unload de Dialog1, ajotue ceci :
DevisIdentSaisie = txtIdent.Text
Dans la construction de ta requete, utilise alors la variable DevisIdentSaisie au lieu de DevisIdent (qui a priori devient inutile)

ATTENTION !! Il semble aussi qu'il te manque un espace devant le and dans la dernière ligne de construction de ta requete.
Pour être sûr que ta requete est OK fait un "MsgBox MaRequete" juste avant ton "With Data1", tu auras ainsi la requete construite tu verras si c'est du SQL correct.

Christophe R.
0

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

Posez votre question
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
29 juil. 2004 à 13:31
D'accord avec Christophe pour le and mais il me semble en plus que tu réalises un produit cartésien et non une jointure interne (à moins que ce soit voulu)

PS : Tu peux aussi faire un debug.print de ta requête à la place du msgbox et la poster ici en copier/coller (ça évite les erreurs de recopie)
0
Yseno Messages postés 11 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 30 juillet 2004
29 juil. 2004 à 14:11
Tout d'abord merci pour votre aide.

donc j'ai fait deux debug print en fin de requette avant with Data:

1 - Debug.Print MaRequette==> le résultat est VIDE

2 - Debug.Print DevisIdent==> le résultat c'est bien ce que j'ai

taper dans la fenetre dialog

Mais malheuresement cela ne fonctionne toujous pas le résultat ds ma flex grid c'est que tout les vendeurs s'affiche.

Avez vous besoin de mon code ?
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
29 juil. 2004 à 14:19
Debug.Print MaRequette <----- T'as mis deux T la !!!
Ajoute tout de suite un Option Explicit en haut de ton module, comme cela tu éviteras toute erreur lié à une faute de frappe dans un nom de variable !!

Christophe R.
0
Yseno Messages postés 11 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 30 juillet 2004
29 juil. 2004 à 14:26
Désolé pour la faute de frappe :(

c'est réglé et la réponse est toujours vide.
0
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
29 juil. 2004 à 14:47
Ta requête semble se faire en parti dans un If ... End If, es-tu sûr de passer dedans ?
0
Yseno Messages postés 11 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 30 juillet 2004
29 juil. 2004 à 14:53
Oui Philippe je rentre bien dedans, y du nouveau même voici le copier coller du debug.print MaRequete et le debug.print est placé juste avant le end if

RESULTAT :
SELECT BIENS.BNO as NUMN BIENS ,VENDEUR.VENNO as NUMN VENDEUR ,VENDEUR.VENNOM as NON ,VENDEUR.VENPRE as NOM ,FROM VENDEUR, where VENDEUR.VENPRE Pierre and ((VENDEUR.VENNOM) DERMI )

Pierre correspond au prénom de DERMI donc dans ma flex grid il ne devrait y avoir que DERMI PIERRE
0
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
29 juil. 2004 à 15:00
Pierre et DERMI sont stockés dans des champs alphanumériques ... il manque donc des quotes à ta requête.

Essayes ceci
[code]MaRequete = "SELECT "
MaRequete = MaRequete & "BIENS.BNO as NUMN BIENS ,"
MaRequete = MaRequete & "VENDEUR.VENNO as NUMN VENDEUR ,"
MaRequete = MaRequete & "VENDEUR.VENNOM as NON ,"
MaRequete = MaRequete & "VENDEUR.VENPRE as NOM ,"
MaRequete = MaRequete & "FROM VENDEUR,BIENS "MaRequete MaRequete & "where VENDEUR.VENPRE '"
MaRequete = MaRequete & DevisIdentMaRequete MaRequete & "' and ((VENDEUR.VENNOM) 'DERMI' ) "[code]
0
Yseno Messages postés 11 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 30 juillet 2004
29 juil. 2004 à 15:15
Merci Philippe pour le mal que tu te donnes,

Alors j'ai remplacé ma requete avec celle que tu me donnes et lors de l'éxéution j'ai un msg d'erreur.

Erreur de compilation :
Procédure attendue et non une variable

Il bloque sur : [code]

Je vais finir par croire que je suis nul

On utilise quand des quotes en SQL ?
0
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
29 juil. 2004 à 17:25
Oups en fait j'ai oublié de fermer ma balise, donc il m'a écrit les 2, je voulais écrire ça ... désolé ;^p

MaRequete = "SELECT "
MaRequete = MaRequete & "BIENS.BNO as NUMN BIENS ,"
MaRequete = MaRequete & "VENDEUR.VENNO as NUMN VENDEUR ,"
MaRequete = MaRequete & "VENDEUR.VENNOM as NON ,"
MaRequete = MaRequete & "VENDEUR.VENPRE as NOM ,"
MaRequete = MaRequete & "FROM VENDEUR,BIENS "MaRequete MaRequete & "where VENDEUR.VENPRE '"
MaRequete = MaRequete & DevisIdentMaRequete MaRequete & "' and ((VENDEUR.VENNOM) 'DERMI' ) "
0
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
29 juil. 2004 à 17:27
Et pour répondre à ta question, on met des quote quand on a une valeur de type "Chaîne de caractères"

Attention, si ton champ peut contenir des quotes, il te faudra doubler les quotes qui le composent (pour lui dire de ne pas interprêter la quote comme un identificateur de texte).
0
Yseno Messages postés 11 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 30 juillet 2004
29 juil. 2004 à 20:09
Bon et bien c'est encore moi et ça ne marche toujours pas.

J'ai simplifié ma requette enspérant mais rien n'y fait voici la requette sous SQL et la même sous VB.

SELECT VENDEUR.VENNO, VENDEUR.VENOM, VENDEUR.VENPRE
FROM VENDEUR;


MaRequete = MaRequete & "VENDEUR.VENNO ," 
MaRequete = MaRequete & "VENDEUR.VENOM ," 
MaRequete = MaRequete & "VENDEUR.VENPRE ,"
MaRequete = MaRequete & "FROM VENDEUR "MaRequete MaRequete & "'WHERE ((VENDEUR.VENOM) 'DERMI' ) "


Dans ma requette écrite sous VB je lui spécifie en dur de m'afficher le vendeur appellé DERMI

Mais encore une fois tout les vendeurs s'affiche

Help please.....

P.S: ='DERMI')" dans mon code n'est pas à la ligne
0
Yseno Messages postés 11 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 30 juillet 2004
29 juil. 2004 à 20:16
Ah j'ai oublié de vous dire que la requette access est rélié à un data et que ma flex grid est elle même relié à ce data.

La fonction Data.Refresh ne fonctionne pas.
0
Rejoignez-nous