PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WD12] Récupérer retour procédure stockée sql server
[WD12] Récupérer retour procédure stockée sql server
Débuté par Cédric DUHIL, 25 fév. 2009 17:46 - 12 réponses
Posté le 25 février 2009 - 17:46
Bonjour,

J'exécute une procédure stockée située dans une base sql server.
Cela fonctionne bien. Je passe donc bien sur ma ligne trace dans le code ci-dessous. Cependant je n'arrive pas à récupérer la valeur retournée par la procédure stockée.
Il me dit <<<return_value n'est ni une rubrique ni un paramètre de la requête>>. Cela semble pourtant bien écrit ainsi dans l'aide. Il doit me manquer quelque chose.
Je suis en accès oledb. C'est le new_id que je veux récupérer.

Voici un extrait du code windev :
MaProcedureStockee est une Source de Données

SI HExécuteRequêteSQL(MaProcedureStockee,gSAGECRM, ...
hRequêteSansCorrection ,"[SAGECRM].[dbo].[eware_get_identity_id] @table_name='LIBRARY'") ALORS
//hRequêteSansCorrection ,"crm_next_id @table_id,") ALORS
//Trace("new_id="+MaProcedureStockee..)
Trace("return_value="+MaProcedureStockee.return_value) //provoque l'erreur
SINON
Erreur(HErreurInfo())
RETOUR
FIN


Voici un extrait de la procédure stockée (std du logiciel donc sans bug) :
ALTER PROCEDURE [dbo].[eware_get_identity_id]
@table_name NVARCHAR(80)
AS


.....

RETURN @new_id
Posté le 09 mars 2009 - 16:27
Sans réponse, je me permets de rééditer ma demande toujours d'actualité.
Posté le 09 mars 2009 - 18:15
Salut,

Le RETURN_VALUE n'est utilisé qu'avec l'accès natif.

D'après ce que j'ai compris en lisant l'aide, il se pourrait que :
"MaProcedureStockee.new_id" te retourne la valeur.

A essayer et si tu veux plus d'exemple, mais ceci en mot-clé dans l'aide "Procédure stockée (Oracle, SQL Server)"
Posté le 09 mars 2009 - 19:40
merci pour votre réponse.
Justement non cela ne marche pas avec .new_id, mais je n'ai effectivement pas l'accès natif.
Peut être est-il obligatoire pour utiliser l'accès aux procédures stockées ??
Posté le 10 mars 2009 - 10:13
C'est ce que j'ai cru également en lisant l'aide mais il y a bien une syntaxe pour les procédures sans l'accès natif.

Par contre, vu que je n'ai pas accès à SQLServer, je ne peux malheureusement pas tester.
Posté le 12 mars 2009 - 19:38
Normalement après:

SI HExécuteRequêteSQL(MaProcedureStockee,gSAGECRM, ...
hRequêteSansCorrection ,"[SAGECRM].[dbo].[eware_get_identity_id] @table_name='LIBRARY'") ALORS

HLitPremier(MaProcedureStockee)
Info(HRécupèreEnregistrement(MaProcedureStockee))

FIN
Posté le 13 mars 2009 - 10:27
Bonjour et merci pour votre réponse.

Avec votre code :
- LE HExécuteRequêteSQL EST OK, comme précédemment
- le Hlitpremier renvoie le message suivant. Sachant, que sauf erreur de ma part je ne peux pas importer dans l'analyse une procédure stockée de sql server (je ne vois que les tables de ma base de données, pas les procédures stockées).
Il faudrait peut etre un hdéclarexterne, mais je ne m'en sors pas avec l'aide (pas d'exemple sqlserver pour la syntaxe).

--------------------------------------------------------------------------------
Erreur à la ligne 35 du traitement Procédure globale pCreation_Un_Library.
Vous avez appelé la fonction HLitPremier.
Fichier <MaProcedureStockee> inconnu dans l'analyse <C:\Mes Projets\ScanToSageCRM\ScanToSageCRM.wdd>, ou requête ou vue non initialisée.
...
- Que s'est-il passé ?
Fichier <MaProcedureStockee> inconnu dans l'analyse <C:\Mes Projets\ScanToSageCRM\ScanToSageCRM.wdd>, ou requête ou vue non initialisée.

...

Assistance

- Vérifiez que le fichier est bien décrit dans l'analyse en cours
- S'il s'agit d'un fichier décrit en dynamique, vérifiez que ce
fichier a bien été déclaré avant par HDéclare, HDéclareExterne
ou HDécritFichier
- S'il s'agit d'une requête du projet ou d'une requête SQL, vérifiez
que cette requête a été déclarée avant par HExécuteRequête pour une
requête du projet ou par HExécuteRequêteSQL pour une requête SQL.

--------------------------------------------------------------------------------
Posté le 13 mars 2009 - 11:46
Bonjour,

Pourtant voilà le code exact que j'utilise et pour moi aucun problème.

----------------------------
TexteReq est une chaîne
Req est une Source de Données
Res est un booléen

TexteReq="Execute MaProcédure @Paramètre = "+....

Res=HExécuteRequêteSQL(Req,MaConnexion,hRequêteSansCorrection,TexteReq)


SI Res=Vrai ALORS

HLitPremier(Req)

FIN
----------------------------

MaConnexion est déclarée dans l'analyse (OLEDB)
Posté le 13 mars 2009 - 12:42
rebonjour, merci enfin quelqu'un qui utilise les procédures sotckées de Sql. On devrait rapidement trouver ;)
Aors j'ai copié-coller votre code, ma connexion s'appelle aussi ainsi dan sl'analyse. J'ai gardé votre intact, sauf après le EECUTE .. bien sûr.
Le res renvoie bien true mais toujours la même erreur sur le hlitpremier.
Votre procédure est référencée dans l'analyse ? C'est une procédure sql ou windev ? Vous utilisez bien comme moi la connexion de type 'SQL Server (Microsoft OLE DB Provider for SQL Server)' ?

- Que s'est-il passé ?
Fichier <Req> inconnu dans l'analyse <C:\Mes Projets\ScanToSageCRM\ScanToSageCRM.wdd>, ou requête ou vue non initialisée.



Thomad a écrit dans le message de news <bb7a8a39658cdaad52a6db2e8ef67f4c@news.pcsoft> :
Bonjour,

Pourtant voilà le code exact que j'utilise et pour moi aucun problème.

----------------------------
TexteReq est une chaîne
Req est une Source de Données
Res est un booléen

TexteReq="Execute MaProcédure @Paramètre = "+....

Res=HExécuteRequêteSQL(Req,MaConnexion,hRequêteSansCorrection,TexteReq)


SI Res=Vrai ALORS

HLitPremier(Req)

FIN
----------------------------

MaConnexion est déclarée dans l'analyse (OLEDB)

Posté le 16 mars 2009 - 17:27
UN grand grand merci à Thomad. Nous avons échangé par mp pour trouver une solution.

En voici la solution :
TexteReq="DECLARE @@ret BIGINT ; EXECUTE @@ret= [SAGECRM].[dbo].[eware_get_identity_id] @table_name='LIBRARY' ; SELECT @@ret"
Res=HExécuteRequêteSQL(Req,MaConnexion,hRequêteSansCorrection,TexteReq)

SI Res=Vrai ALORS
HLitPremier(Req)
Info(HRécupèreEnregistrement(Req))
FINSI
Posté le 19 février 2015 - 13:28
Merci, j'ai réglé mon pb aussi!
Membre enregistré
4 messages
Posté le 05 juillet 2016 - 09:02
Merci beaucoup Cédric (et Thomad) pour votre retour sur ce forum. Cette solution m'a également permis de résoudre mon problème. J'ai créé une classe qui permet de "simplifier" l'interface avec SQL Server...
Posté le 31 mars 2020 - 18:39
Bonjour
j'ai également le souci :
mais en recopiant votre code, j'ai toujours le problème
cela plante sur le hlitpremier!
avez toucher à des paramètres particuliers de la connexion ?
ce sont les seules infos que je ne vois pas par rapport à votre exemple!
merci
Cordialement,
Philippe Leroy
confiné mais toujours en dév.