Procédure stockée SQL server & C++

Signaler
Messages postés
3
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
2 août 2007
-
Messages postés
1
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
17 août 2010
-
VBlanco

3 réponses

Messages postés
3
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
2 août 2007

VBlanco
Messages postés
3
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
2 août 2007

Bonjour,

Je travaille actuellement sur un programme en Visual C++ 6.0 qui permet de remplir une base de données (MSDE2000) en exécutant une procédure stockée. Les tables sont toujours correctement mises à jour mais pas le paramètre de sortie (@retour) ! Lorsque la procédure doit renvoyer le paramètre de retour égal à 10 (on est passé dans la structure if), la variable C++ iRetour reste à sa valeur initiale. Le paramètre se sortie fonctionne correctement si j'enlève l'instruction INSERT INTO de la structure if !

L'ensemble des fonctions ODBC utilisées dans le programme C++ renvoient SQL_SUCCESS et lorsque je lance la procédure stockée directement sous SQL Server tout se passe bien. Bref, j'en perds mon latin (ou plutôt mon C++).

Merci d'avance pour vos lumières.

iRetour = 1;

SQLAllocHandle(SQL_HANDLE_STMT, m_hDB_Connection, &hstmt);

if(SQLPrepare(hstmt, (SQLCHAR *)?{CALL AddReport(1,2,3,4,5,?}?, SQL_NTS) != SQL_SUCCESS)
{
::Sleep(100);
}
if(SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&iRetour, 0, &iRetourLength) != SQL_SUCCESS)
{
::Sleep(100);
}

if(SQLExecute(hstmt) != SQL_SUCCESS)
{
::Sleep(100);
}



CREATE PROCEDURE AddReport (@data1 int, @data2 int,@data3 int,@data4 int,@data5 int,@retour int OUTPUT)
AS
SET @retour = 0

if not exists(SELECT * from table_1 WHERE Data_Code=@data1)
BEGIN
SET @retour = 10
INSERT INTO table_1(Data_Code, Data_Text) VALUES (@data1, 'Value of data1 <' + ltrim(str(@data1)) + '>')
END

if not exists(SELECT * from table_2 WHERE Data_Code=@data2)
BEGIN
SET @retour = 10
INSERT INTO table_2(Data_Code, Data_Text) VALUES (@data2, 'Value of data2 <' + ltrim(str(@data2)) + '>')
END

INSERT INTO table_3 (Colonne_1, Colonne_2, Colonne_3)
VALUES (@data3, @data4, @data5)
GO
Messages postés
1
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
17 août 2010

j'ai le même problème.
Ca marche losque je ne fais pas d'insert.
Dés qu'il y a un insert ca plante.
As tu trouvé une solution ?