Précédent   Forum des professionnels en informatique > Autres langages > Général Visual Basic 6 et VBScript > VBScript
VBScript Le forum d'entraide sur VBScript. Avant de poster -> La FAQ VBScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2012, 18h08   #1
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 2
Points : 2
Par défaut ADO Command Object et interaction avec SQL Server

Hello,

Voilà, je ne sais pas si je vais vers la bonne direction alors je vais être assez complet.

Dans un vbscript j'ai donc une connexion ADO (ADODB.Connection) que j'utilisais jusqu'ici avec la méthode Execute pour tapper ma BDD en SQL.
Problème : certaines erreurs SQL ne sont pas remontées dans l'objet vbscript "err" ni dans la collection ADO cn.errors.

Donc je suis tombé sur un autre objet ADO : Command qui semble-t-il permet de passer des paramètres de, et vers SQL.
Mais je n'arrive pas à comprendre comment ça marche...

voici mon code :
Code VBS :
1
2
3
4
5
6
7
8
9
10
11
12
 
set cmddb = WScript.CreateObject("ADODB.Command")
cmddb.ActiveConnection = cndb
cmddb.CommandType = 1 'adCmdText pour une requête SQL simple
cmddb.CommandText = SQLtext 'voir le code SQL plus loin
cmddb.Parameters.Append cmddb.CreateParameter("@toto", 20, 4) '20 pour adBigInt (mon paramètre sera un entier) 4 pour adParamReturnValue (je veux remonter une info de SQL vers VBS)
 
set result = cmdsrvstl.Execute
 
for each objParam in cmddb.Parameters
	wscript.echo objParam
next
Partie SQL j'ai essayé :
Code SQL :
1
2
declare @toto AS integer
SET @toto = 12
Mais à chaque fois mon "wscript.echo objParam" me renvoie un un string vide...

Comment spécifier au code SQL de renvoyer quelque chose dans mon paramètre "toto" ?

De plus, si mon code SQL contient plus de 2 opérations, mon recordset de retour n'est pas créé.
(Par exemple si je fais un UPDATE puis un SELECT dans le même ".Execute", le résultat du SELECT n'arrive pas dans mon recordset "result")

Merci d'avance pour votre aide

** Ce message est aussi posté dans la catégorie SQL Server **
BlobbyBlob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 19h54   #2
Membre confirmé
 
Inscription : octobre 2011
Messages : 188
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 188
Points : 287
Points : 287
Citation:
Partie SQL j'ai essayé :
Bien, voire ce qu'il faut faire cas par cas.

[0]
Citation:
RETURN 12
Ce n'est pas possible de faire ça: le script doit montrer un retour d'erreur. Vous pouvez verifier un sql exécuté avec command type text dans IDE. Si c'est valable, vous pouvez travailler avec vbs sans doute, sinon, non plus.

[1]
Citation:
SELECT 12 AS toto
Pour trouver via vbs, ce n'est pas via adParamReturnValue paramètre, c'est via recordset ou fields, comme ceci.
Code :
1
2
3
4
5
6
7
8
9
 
SQLtext="select 12 as toto"
cmddb.CommandText = SQLtext 
cmddb.commandtype=1
set rs=cmddb.execute
if not rs.eof then
    wscript.echo rs(0).value
    wscript.echo rs("toto").value
end if
[2]
Citation:
declare @toto AS integer
SET @toto = 12
Le même: pour y trouver quelque chose via vbs, il faut tout de même mettre un select.
Code :
1
2
3
4
5
6
7
SQLtext="declare @toto AS integer" & vbcrlf & "SET @toto = 12" & vbcrlf & "select @toto"
cmddb.CommandText = SQLtext 
cmddb.commandtype=1
set rs=cmddb.execute
if not rs.eof then
    wscript.echo rs(0).value
end if
Alors comment faire employer le technique de Paramèters?

D'abord, si vous utilisiez à la ligne sql, la syntaxe était fausse.
[1.1]
Code :
1
2
3
4
5
6
7
8
9
SQLtext="select ? as toto"
cmddb.CommandText = SQLtext 
cmddb.commandtype=1
cmddb.parameters.append cmddb.createparameter("x",20,1,8,12)
set rs=cmddb.execute
if not rs.eof then
    wscript.echo rs(0).value
    wscript.echo rs("toto").value
end if
Encore un example.
[2.1]
Code :
1
2
3
4
5
6
7
8
9
 
SQLtext="declare @x Bigint" & vbcrlf & "set @x=?" & vbcrlf & "select @x"
cmddb.CommandText = SQLtext 
cmddb.commandtype=1
cmddb.parameters.append cmddb.createparameter("anyname",20,1,8,12)
set rs=cmddb.execute
if not rs.eof then
    wscript.echo rs(0).value
end if
Je suis déjà fatigué de mettre tout ça. Pour illustrer l'utilisation de adParamOutput et adParamReturnValue, il faut que vous soyez habile en travaillant sur "stored procedure". Peut-être pour l'autrefois.
tsuji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 12h30   #3
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 2
Points : 2
Merci pour cette réponse complète.

Le retour par select dans mon recordset est la première chose que j'ai essayé.

Malheureusement ma requête effectue d'autres opérations avant le retour, (unpdate / insert), et dans ces cas là, je n'ai pas saisi pourquoi, mais mon recordset de retour n'est pas valable.

rien que ça :
Code SQL :
1
2
3
DECLARE #toto as INT
SET @toto = 2
SELECT 12

Ca me renvoie un recordset fermé (rs.state) alors que simplement SELECT 12 me renvoie les données dont j'ai besoin.
BlobbyBlob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 13h02   #4
Membre confirmé
 
Inscription : octobre 2011
Messages : 188
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 188
Points : 287
Points : 287
Citation:
...ma requête effectue d'autres opérations avant le retour...
Je ne crois pas que on doit travailler contre le logiciel au lieu de travailler avec! Je ne sais quoi dire d'autre.

Et puis la partie de "rien que ça": montrez le script complet pour ça. Ma réponse etait assez complète pour le couvre, non?
tsuji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 17h20   #5
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 2
Points : 2
"Rien que ça" : Le code que j'ai mis est le code complet que j'ai testé !
Si je fais un .Execute avec ce texte SQL de 3 lignes, le RecordSet en retour ne contient pas ma donnée "12".
Par contre si je fais
Code :
1
2
3
SELECT 12
DECLARE @toto as INT
@toto = 2
Là ça marche, la méthode Execute ne renvoyait que le premier résultat, "SET @toto = 2" serait alors un résultat...

Tout ce que je veux, c'est sortir en erreur !
Je fais un update puis un select pour vérifier si mon update a marché.
Si ma vérification m'indique une erreur, alors je veux pouvoir forcer une erreur...

Je ne comprends pas que ça puisse être compliqué T.T
BlobbyBlob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 17h34   #6
Membre confirmé
 
Inscription : octobre 2011
Messages : 188
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 188
Points : 287
Points : 287
Vous voulez dire que le code j'ai mis en [2] ne marche pas? Je ne peux plus explicit que cela, le SQLText. (Il peut paraitre select @toto ou select 12, egalement.)
tsuji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 09h47   #7
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 2
Points : 2
Effectivement non le code en [2] ne marche pas, le rs n'est pas ouvert.
BlobbyBlob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 10h36   #8
Membre confirmé
 
Inscription : octobre 2011
Messages : 188
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 188
Points : 287
Points : 287
Citation:
Effectivement non le code en [2] ne marche pas, le rs n'est pas ouvert.
C'est pour ça que j'ai dit
Citation:
Et puis la partie de "rien que ça": montrez le script complet pour ça.
J'ai bien verifié avant de poster même pour ça. Je resente de prolonger une discussion interminable. Pourquoi pas postez un petit script complet pour montrer votre soucis?
tsuji est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h24.


 
 
 
 
Partenaires

Hébergement Web