Variable dans macro Excel et requête SQL

Variable dans macro Excel et requête SQL - VB/VBA/VBS - Programmation

Marsh Posté le 12-04-2007 à 15:25:47    

Bonjour,
 
J'ai un classeur Excel avec deux feuilles. Sur la feuil2-cel B4, je saisis un numéro d'article
(alpha-numérique)
 
Un bouton qui lance une macro quand on clique dessus.
 
Cette macro lance une requête sur une base sql et ramène les données sur toutes les commandes
concernant le code article saisi en Feuil2-cel B4 (ex : 09200)
 
La valeur saisie, je la passe en variable dans la macro, quand je clique sur le bouton pour lancer
la macro, aucune donnée n'est ramenée et aucun message d'erreur.
 
Si je mets le code article 'en dur' dans la requête, la j'ai les informations qui sont importées
correctement de la base sql.
 
OS : Win2K + SqlServer 2K
 
Qui peut m'aider ??
 
 
Ma macro :
-------------------------------------------
Sub Macro1()
 
Dim env As rdoEnvironment
Dim valcel As String
valcel = Excel.Range("Feuil2!B4" ).Value
 
Dim cnBat As ADODB.Connection
Set cnBat = New ADODB.Connection
 
Dim strConn As String
strConn = "PROVIDER=SQLOLEDB;"
strConn = strConn & "DATA SOURCE=curie;UID=sa;PWD=holdup;DATABASE=spca_prod"
cnBat.Open strConn
 
 
'------------------
Dim rsBat As ADODB.Recordset
Set rsBat = New ADODB.Recordset
 
With rsBat
     .ActiveConnection = cnBat
     .Open "select codeart,numcde,totht
               from cdes  
               where codeart=' & valcel'"
     Feuil1.Range("A2" ).CopyFromRecordset rsBat
     
    .Close
End With
 
cnBat.Close
Set rsBat = Nothing
Set cnBat = Nothing
 
End Sub
 
'-------------------------------
 
 
Merci à vous....
 

Reply

Marsh Posté le 12-04-2007 à 15:25:47   

Reply

Marsh Posté le 12-04-2007 à 15:30:26    

"09200" <- quand tu saisis ça, sous excel, il détecte un nombre. il vire donc le 0. le "=" dans la requête porte donc sur "9200", qui n'existe pas.
 
essaie de changer le format de la cellule en "texte" (ou saisi '09200) pour voir.
 
ps : pour le reste, mise à part que ton code n'est pas du tout protégé contre les SQL Injection, ça peut aller, effectivement ça devrait marcher

Message cité 1 fois
Message édité par MagicBuzz le 12-04-2007 à 15:31:06
Reply

Marsh Posté le 12-04-2007 à 15:36:02    

MagicBuzz a écrit :

"09200" <- quand tu saisis ça, sous excel, il détecte un nombre. il vire donc le 0. le "=" dans la requête porte donc sur "9200", qui n'existe pas.
 
essaie de changer le format de la cellule en "texte" (ou saisi '09200) pour voir.
 
ps : pour le reste, mise à part que ton code n'est pas du tout protégé contre les SQL Injection, ça peut aller, effectivement ça devrait marcher


 
-----------------------
Merci de ta réponse,
 
La cellule est deja en texte et je récupère bien la valeur '09200' au niveau de la variable.
Si je mets dans la procédure la commande suivante :
Excel.Range("Feuil2!B10" ).Value = valcel
La valeur récuperée est bien : 09200
 
Cordialement
 
...

Reply

Marsh Posté le 12-04-2007 à 15:42:04    

chelou :spamafote:
 
ah, quoique... t'as pas plutôt un bon gros fatal error ? vire tes on error resume next que t'as collé partout si c'est pas le cas.
 
j'avais pas fait gaffe à ça :
 

Code :
  1. .Open "select codeart,numcde,totht
  2.               from cdes  
  3.               where codeart=' & valcel'"


 
faut écrire
 

Code :
  1. .Open "select codeart,numcde,totht " &_
  2.               "from cdes  " &_
  3.               "where codeart='" & valcel & "'"

Reply

Marsh Posté le 12-04-2007 à 16:00:38    

MagicBuzz a écrit :

chelou :spamafote:
 
ah, quoique... t'as pas plutôt un bon gros fatal error ? vire tes on error resume next que t'as collé partout si c'est pas le cas.
 
j'avais pas fait gaffe à ça :
 

Code :
  1. .Open "select codeart,numcde,totht
  2.               from cdes  
  3.               where codeart=' & valcel'"


 
faut écrire
 

Code :
  1. .Open "select codeart,numcde,totht " &_
  2.               "from cdes  " &_
  3.               "where codeart='" & valcel & "'"



 
---------------
MagicBuzz t'es un magicien...  :wahoo:  
 
ça marche bien... Merci beaucoup.
 
D'autre part, quand tu marques :
'mise à part que ton code n'est pas du tout protégé contre les SQL Injection'
 
cela veut dire quoi ?
 
Encore merci et
a+

Reply

Marsh Posté le 12-04-2007 à 16:04:22    

essaie de taper ça comme code produit :
 
a' or 1=1;--
 
je te laisse imaginer ce qu'il se passe si tu écrits "drop table cdes" entre le ; et les -- ;) (évite de le faire :o)


Message édité par MagicBuzz le 12-04-2007 à 16:04:57
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed