PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → SQL SERVER - Procédure stockée avec SELECT
SQL SERVER - Procédure stockée avec SELECT
Débuté par Dominique MOUNIER-PO, 05 sep. 2013 10:25 - 8 réponses
Membre enregistré
15 messages
Posté le 05 septembre 2013 - 10:25
Bonjour,
Je dois exécuter une procédure stockée sur un serveur SQL sans utiliser l'accès Natif et qui retourne un résultat en forme de liste (SELECT). Je n'ai pas accès à la base, uniquement à l'exécution de la procédure stockée.
Quelqu'un peut-il m'aider ??? je suis dans une impasse.

--
Dominique
Membre enregistré
25 messages
Popularité : +1 (1 vote)
Posté le 05 septembre 2013 - 11:36
Bonjour,

j'avais déjà essayé de récupérer les paramètres de sorties sur une proc stockée SQL server. Malheureusement sans accès natif, je crois bien que ce n'est pas possible.

Je te donne tout de même une piste avec les fonctions SQLPremier et SQLCOL que tu peux utiliser. Voici un bout de code pour exemple si ça peut te mettre sur la bonne voie :

TexteReq="DECLARE @return_value int, @lotTraites int, @cmdTraites int, @dateSortie date "+RC+" EXEC@return_value =PREPARATION_COMMANDES "+RC+" @date = '"+FEN_principale.gsDateCourante+"', @lotTraites = @lotTraites OUTPUT,@cmdTraites = @cmdTraites OUTPUT, @dateSortie = @dateSortie OUTPUT "+RC+" SELECT@lotTraites as N'@lotTraites',@cmdTraites as N'@cmdTraites', @dateSortie as N'dateSortie' "+RC+"SELECT'Return Value' = @return_value"

SQLConnecte("server","user","password","database","OLEDB",hOledbSQLServer)
SI SQLExec(TexteReq,"test") ALORS
SQLPremier("test")
Trace(SQLCol("test",1)) // renvoi la valeur de la première colonne de sortie

SINON
Info(HErreurInfo())
RENVOYER(Faux)
FIN

Bonne journée,
Membre enregistré
15 messages
Posté le 05 septembre 2013 - 13:17
Merci beaucoup pour ta réponse.
J'ai trouvé la solution entre temps en utilisant un code proche du tien mais en utilisant la fonction SQLTABLE.

Exemple de code:

TableSupprimeTout(TABLE_ResRequete)

// Connexion SQL SERVER
nNumConnexion = SQLConnecte(sServer,sUser,sPassword,sDataBase,"OLEDB",hOledbSQLServer)
SI nNumConnexion <> 0 ALORS

sSQLRequete est une chaîne = "MaProcedureStockee '"+ParametreProcedure+"'"
SI SQLExec(sSQLRequete,"REQ1") ALORS
SQLTable("REQ1",TABLE_ResRequete)
SINON
SQLInfoGene("REQ1")
Info("Erreur SQL : " + SQL.MesErreur)
FIN
SQLFerme("REQ1")

SINON
// La connexion a échoué : affichage d'un message explicatif
SQLInfoGene()
Erreur("La connexion à la source de données" + sDataBase + ...
"a échoué."+ RC +...
"Code erreur : " + SQL.Erreur + RC + SQL.MesErreur)
FIN

SQLDéconnecte()

--
Dominique
Membre enregistré
25 messages
Popularité : +1 (1 vote)
Posté le 05 septembre 2013 - 13:24
c'est cool !

Merci de ton partage, cela me servira très probablement dans mes futurs projets.
Membre enregistré
6 messages
Posté le 19 avril 2019 - 17:57
Bonjour Dominique,
J'utilise la même méthode que vous pour exécuter une procédure stockée sur SQL Server mais je ne parviens pas à récupérer les résultats... Je sèche depuis 2 jours...Auriez-vous une idée ?
Posté le 21 août 2019 - 22:29
Dominique MOUNIER-PO avez-vous trouvez une solution ? Je sèche dessus depuis un moment. J'aurai voulu pouvoir lire ligne par ligne le résultat sans afficher dans une table. Un peu comme avec Hlitpremier et Hlitsuivant
Posté le 21 août 2019 - 23:26
//i est un entier = 0
//SQLExec("SELECT NOM, PRENOM, POSTE, PHOTO FROM CLIENT", "REQ1")
//// Récupérer la requête ligne à ligne
//TANTQUE SQLAvance("REQ1") = 0 // Il y a encore une ligne à lire
// i++
// // Récupérer les données
// NOM[i] = SQLLitCol("REQ1", 1)
// PRENOM[i] = SQLLitCol("REQ1", 2)
// POSTE[i] = SQLLitCol("REQ1", 3)
//FIN
//SQLFerme("REQ1")
Membre enregistré
14 messages
Posté le 21 août 2019 - 23:30
Jean-Luc P. Je pense avoir trouver la solution pour ton problème

//i est un entier = 0
//SQLExec("SELECT NOM, PRENOM, POSTE, PHOTO FROM CLIENT", "REQ1")
//// Récupérer la requête ligne à ligne
//TANTQUE SQLAvance("REQ1") = 0 // Il y a encore une ligne à lire
// i++
// // Récupérer les données
// NOM[i] = SQLLitCol("REQ1", 1)
// PRENOM[i] = SQLLitCol("REQ1", 2)
// POSTE[i] = SQLLitCol("REQ1", 3)
//FIN
//SQLFerme("REQ1")

--
AFRICA SERVICE
Membre enregistré
65 messages
Posté le 15 mars 2021 - 16:15
DMP a écrit :
Merci beaucoup pour ta réponse.
J'ai trouvé la solution entre temps en utilisant un code proche du tien mais en utilisant la fonction SQLTABLE.

Exemple de code:

TableSupprimeTout(TABLE_ResRequete)

// Connexion SQL SERVER
nNumConnexion = SQLConnecte(sServer,sUser,sPassword,sDataBase,"OLEDB",hOledbSQLServer)
SI nNumConnexion <> 0 ALORS

sSQLRequete est une chaîne = "MaProcedureStockee '"+ParametreProcedure+"'"
SI SQLExec(sSQLRequete,"REQ1") ALORS
SQLTable("REQ1",TABLE_ResRequete)
SINON
SQLInfoGene("REQ1")
Info("Erreur SQL : " + SQL.MesErreur)
FIN
SQLFerme("REQ1")

SINON
// La connexion a échoué : affichage d'un message explicatif
SQLInfoGene()
Erreur("La connexion à la source de données" + sDataBase + ...
"a échoué."+ RC +...
"Code erreur : " + SQL.Erreur + RC + SQL.MesErreur)
FIN

SQLDéconnecte()

--
Dominique


Merci pour ce partage car je galère en ce moment sur ce sujet

Au niveau de ta Variable (MaProcedureStockee ) c'est le nom de ta procédure sur SQL SERVER ?

Quelle syntaxe pour le passage des paramètres dans ta variable (ParametreProcedure), en effet si il y en a plusieurs, je ne vois pas trop comment faire.

D'avance merci

--
Aurélien MACHABERT
Développeur Chez GAUTHIER Menuiserie