PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → [WD12] Récupérer retour procédure stockée sql server
[WD12] Récupérer retour procédure stockée sql server
Iniciado por rbi.duhil, 25,feb. 2009 17:46 - 12 respuestas
Publicado el 25,febrero 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
Publicado el 09,marzo 2009 - 16:27
Sans réponse, je me permets de rééditer ma demande toujours d'actualité.
Publicado el 09,marzo 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)"
Publicado el 09,marzo 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 ??
Publicado el 10,marzo 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.
Publicado el 12,marzo 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
Publicado el 13,marzo 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.

--------------------------------------------------------------------------------
Publicado el 13,marzo 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)
Publicado el 13,marzo 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)

Publicado el 16,marzo 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
Publicado el 19,febrero 2015 - 13:28
Merci, j'ai réglé mon pb aussi!
Miembro registrado
4 mensajes
Publicado el 05,julio 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...
Publicado el 31,marzo 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.