Passer la valeur d'une variable à la commande Select (SQL)

Marneus73 Messages postés 344 Date d'inscription mercredi 24 janvier 2007 Statut Membre Dernière intervention 27 octobre 2008 - 24 oct. 2008 à 17:02
Marneus73 Messages postés 344 Date d'inscription mercredi 24 janvier 2007 Statut Membre Dernière intervention 27 octobre 2008 - 24 oct. 2008 à 18:54
Bonjour à tous,
Encore une question sur les requettes en SQL sous VB:
J'ai une table avec les caractéristiques de pièces mécaniques (matière, poids, nom...). Au lancement du prog j'extrais le nom de toutes les pièces dans une listbox pour que l'utilisateur puisse toutes les voir. Ensuite lorsqu'il clique sur l'une d'entre elles j'aimerais que les infos relatives à cette dernière s'affichent dans différentes TextBoxes prévues à cet effet.
Pour cela, j'ai crée une variable nommée "piece" et je récup le nom grâce à : "ListBox1.SelectedItem". Ensuite j'instancie une connexion avec une commande pour aller récup les infos sur la table. Et là ???
Comment dire que le texte de référence pour WHERE est celui de la variable piece dans  : Mycommand.CommandText "SELECT Matière, Poids, Prix_Kg FROM Table_Steel WHERE Nom valeur de ma variable" ???
Merci d'avance

14 réponses

gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
24 oct. 2008 à 17:15
Bonjour,
Mycommand.CommandText "SELECT Matière, Poids, Prix_Kg FROM Table_Steel WHERE Nom ListBox1.SelectedItem

a+
0
Marneus73 Messages postés 344 Date d'inscription mercredi 24 janvier 2007 Statut Membre Dernière intervention 27 octobre 2008
24 oct. 2008 à 17:30
J'ai essayé et ça me dit : "L'identificateur en plusieurs parties "ListBox1.SelectedItem" ne peut pas être lié." ?!
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
24 oct. 2008 à 17:37
Bonjour,
petite erreurMycommand.CommandText "SELECT Matière, Poids, Prix_Kg FROM Table_Steel WHERE Nom " & ListBox1.SelectedItem

a+
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 oct. 2008 à 17:46
Ya une autre solution, tu pose un dataset et un datatable sur ta form, ainsi qu'un bindingsource.

dans ta listbox tu lui doit que le remplissage de la liste se fait par le binding source (propriété Datasource je crois). Chacun des textbox, tu les lies au champs correspondant du bindingsource.
Comme ça, normalement, lorsque tu va sélectionner  une piece dan la listbox, les autres champs devraient automatiquement se mettre à jours.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0

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

Posez votre question
Marneus73 Messages postés 344 Date d'inscription mercredi 24 janvier 2007 Statut Membre Dernière intervention 27 octobre 2008
24 oct. 2008 à 17:46
C'est exceptionnel, maintenant ça me dit que le nom de ma pièce choisie n'est pas un nom de colonne valide !!!? la sélection n'est pas censé être un champ plutôt qu'une colonne ?
0
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
24 oct. 2008 à 17:53
tu dois mettre des single quotes pas de single quotes, il interprete la valeur de ta liste comme un champs de la table...

Voici comment faire :
Mycommand.CommandText "SELECT Matière, Poids, Prix_Kg FROM Table_Steel WHERE Nom '" & ListBox1.SelectedItem & "'"

<hr size="2" width="100%" /> 
  zen69 aka Ortho Le Profett
 
0
Marneus73 Messages postés 344 Date d'inscription mercredi 24 janvier 2007 Statut Membre Dernière intervention 27 octobre 2008
24 oct. 2008 à 17:53
casy :
J'ai essayé, dans les propriétés de la listbox, il y a un truc : "DataBindings" où on peut lier des valeurs de la table à des propriétés. Elles y sont toutes sauf Item, celle qui m'intéresse !
0
Marneus73 Messages postés 344 Date d'inscription mercredi 24 janvier 2007 Statut Membre Dernière intervention 27 octobre 2008
24 oct. 2008 à 17:57
zen69 encore une erreur lol
--> Les types de données ntext et varchar sont incompatibles dans l'opérateur equal to.
Mais ici, ça vient du type de donnée que j'ai choisi non ? C'est quoi la différence entre ntext et text, c'est pas un nombre de caractère limité pour ntext ?
0
ricky84 Messages postés 44 Date d'inscription dimanche 8 septembre 2002 Statut Membre Dernière intervention 13 janvier 2014
24 oct. 2008 à 17:59
et je dirais meme :
WHERE Nom like ' " & ListBox1.SelectedItem &" ' "

mettre la chaine entre apostrophes, là, j'ai mis des espaces pour bien les voir, mais il ne faut pas les mettre les espaces
aussi, si la chaine contient des apostrphes, il faut les remplacer par 3 apostrohes qui se suivent

L'orange devient L'''orange

Texte=Titre.Replace("'", "'''")
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 oct. 2008 à 18:02
"...J'ai essayé, dans les propriétés de la listbox, il y a un truc :
"DataBindings" où on peut lier des valeurs de la table à des
propriétés. Elles y sont toutes sauf Item, celle qui m'intéresse !..."

Nan, c'est pas du tout ça.

Pour ta listbox, propriété Datasource, tu lie ton bindingsource, propriété Displaymenber, tu lie le champ piece de ton bindingsource.

Pour les autres texboxs, oui, il faut passer par databinding ou tu liera les champs correspondants de ton bindingsource.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
Marneus73 Messages postés 344 Date d'inscription mercredi 24 janvier 2007 Statut Membre Dernière intervention 27 octobre 2008
24 oct. 2008 à 18:19
Ricky84 --> Tentative non valide de lecture lorsque aucune donnée n'est présente.
J'ai demandé à VB de m'afficher le résultat dans une MsgBox.
casy --> j'arrive à afficher la liste de pièce dans la listbox, mais je n'ai pas d'objet datatable dans la boite à outils.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 oct. 2008 à 18:35
oui excuse moi, c'est un dataset, un tableadapter et un bindingsource qu'il faut.

Mais normalement si tu n'as pas encore de source de données connectée à ta feuille, quand tu vas dans la propriété DataSource de ta listbox, VB vas tout te créer automatiquement

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
Marneus73 Messages postés 344 Date d'inscription mercredi 24 janvier 2007 Statut Membre Dernière intervention 27 octobre 2008
24 oct. 2008 à 18:44
Ok c'est nickel ça marche super bien merci, mais je ne comprends pas comment ça fonctionne (qui fait quoi) et j'aime bien avoir une idée du circuit des infos des trucs que je programme, sinon ça sert à rien, je fais que du copier collé d'internet et ça marche aussi, mais je n'y comprendrais rien !
Et comment faire avec les lignes de code maintenant ? Car si je veux faire la même chose avec une treeview, et ajouter des nœuds en fonction des items de la base, je ne peux pas avec le trio dataset/bindingsource/tableadapter.
0
Marneus73 Messages postés 344 Date d'inscription mercredi 24 janvier 2007 Statut Membre Dernière intervention 27 octobre 2008
24 oct. 2008 à 18:54
C'est bizarre, j'ai fait deux, trois test et même quand je met une valeur connue, du genre :
Mycommand.CommandText = "SELECT Matière FROM Table_steel WHERE Nom='axe1'"
et j'ai exactement la même erreur qu'avec vos solutions, ça veut donc dire qu'elles sont bonnes mais qu'il y a une erreur autre part !?

message : "Tentative non valide de lecture lorsque aucune donnée n'est présente."
0
Rejoignez-nous