Probléme avec requete SELECT et variable

Résolu
cs_Oxydation Messages postés 10 Date d'inscription mardi 23 février 2010 Statut Membre Dernière intervention 4 mars 2010 - 3 mars 2010 à 10:43
cs_Oxydation Messages postés 10 Date d'inscription mardi 23 février 2010 Statut Membre Dernière intervention 4 mars 2010 - 3 mars 2010 à 15:26
Bonjour à tous,

Je code en VBA excel, j'ai une base de données sous SQL server2005 connectée a distance. Le formulaire que j'utilise contient des textBox et un bouton "valider", ce bouton lorsque je clique dessus envoie les données inscrites dans les textbox dans une table nommée "Pieces", tout fonctionne correcement sauf pour une colonne, mon problème est que cette colonne doit contenir un ID (identifiant provenant d'une autre table nommée Users), j'ai donc une variable SQL_ligne qui doit recevoir le résultat de la requete :
----------------------------------------------------------------------
Set rs = New ADODB.Recordset
Dim SQL_ligne As String

SQL_ligne "SELECT ID FROM Users WHERE LOGIN '" & Label115.Caption & "' "
----------------------------------------------------------------------
Le label 115 contient "mip" , ce qui correspond a la colonne LOGIN de ma table Users.

Dans ma requete Insert into j'ai ceci : rs.Open "Insert Into Pieces(ID) Values ('" & SQL_ligne & "')", cN

Or quand je clique sur mon bouton valider, toutes les données des textBox s'inscrivent correctement dans ma table Piece SAUF la colonne ID qui reçoit exactement ceci "SELECT ID FROM Users WHERE LOGIN = '" & Label115.Caption & "' "

Or je voudrais que la colonne ID reçoive le résultat de la requete et je n'y parviens pas.

J'espere être compréhensible, merci d'avance pour votre aide.

4 réponses

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
3 mars 2010 à 14:05
Bonjour,

C'est normal, dans la requête INSERT tu dois passer une valeur, ici celle de SQL_Ligne qui est du caractère.

De toutes façons, cela ne peut pas marcher comme tu veux le faire, car un RS.Open renvoie TOUJOURS un Recordset et non une valeur.

Il faut d'abord exécuter la requête SQL_Ligne, stocker dans une variable la valeur désirée puis faire ton INSERT comme ceci:

rs.Open "Insert Into Pieces(ID) Values ('" & ta_variable & "')", cN
(enlève les quotes si ta variable ET ton champ cible sont numériques.

Calade
3
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
3 mars 2010 à 14:49
En supposant que la valeur que tu recherches est contenu dans le champ ID de la table gmt_users:

ta_variable = rs.Fields("ID").value

Pour la petite histoire, cela n'a rien à voir avec VBA, c'est de l'ADO, la requête elle-même étant du SQL. Il est important de faire la part des choses pour bien s'y retrouver même si ce n'est pas toujours facile au début.


Calade
3
cs_Oxydation Messages postés 10 Date d'inscription mardi 23 février 2010 Statut Membre Dernière intervention 4 mars 2010
3 mars 2010 à 14:43
Merci pour ta réponse j'y vois déjà plus clair, en revanche et j'en suis désolé je ne vois pas commment stocker la valeur du résultat de la requete dans une variable, c'est mon principal probléme ici, après avoir executé la requete :

rs.open "SELECT ID FROM gmt_users WHERE LOGIN '" & Label115.Caption & "' "


Je ne sais pas comment mettre le résultat dans ma variable :(

Désolé mes connaissances en Vba sont limitées, surtout au niveau des requêtes SQL je viens de commencer.

Merci encore.
0
cs_Oxydation Messages postés 10 Date d'inscription mardi 23 février 2010 Statut Membre Dernière intervention 4 mars 2010
3 mars 2010 à 15:26
J'ai testé le code que tu m'a donné et... cela fonctionne parfaitement !

Et merci pour la petite histoire en effet j'ai un peu de mal à me faire au SQL dans le Vba (de plus je n'apprécie pas particuliérement ce langage mais c'est dans le cadre de mon projet de stage).

En tout cas merci beaucoup pour ton aide et tes explications précises je comprend déjà un peu mieux le fonctionnement.

Encore merci
0
Rejoignez-nous