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

Signaler
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008
-
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008
-
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

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

a+
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

J'ai essayé et ça me dit : "L'identificateur en plusieurs parties "ListBox1.SelectedItem" ne peut pas être lié." ?!
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
4
Bonjour,
petite erreurMycommand.CommandText "SELECT Matière, Poids, Prix_Kg FROM Table_Steel WHERE Nom " & ListBox1.SelectedItem

a+
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
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
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

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 ?
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
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
 
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

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 !
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

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 ?
Messages postés
44
Date d'inscription
dimanche 8 septembre 2002
Statut
Membre
Dernière intervention
13 janvier 2014

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("'", "'''")
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
"...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
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

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.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
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
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

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.
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

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."