Soucis avec une Requette SQL en VB

Résolu
Signaler
Messages postés
11
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
30 juillet 2004
-
Messages postés
11
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
30 juillet 2004
-
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

Messages postés
13
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
19 août 2004

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
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
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
Messages postés
11
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
30 juillet 2004

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
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
28
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
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
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
Messages postés
11
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
30 juillet 2004

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
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
28
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
Messages postés
11
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
30 juillet 2004

Désolé pour la faute de frappe :(

c'est réglé et la réponse est toujours vide.
0
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
Ta requête semble se faire en parti dans un If ... End If, es-tu sûr de passer dedans ?
0
Messages postés
11
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
30 juillet 2004

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
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
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
Messages postés
11
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
30 juillet 2004

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
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
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
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
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
Messages postés
11
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
30 juillet 2004

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
Messages postés
11
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
30 juillet 2004

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