[C++ / SQL / SQL Server 7] j'ai un message obscur

j'ai un message obscur [C++ / SQL / SQL Server 7] - Programmation

Marsh Posté le 07-01-2001 à 00:46:09    

A partir d'un programme C++, je tente d'insérer des lignes dans une base de données en faisant appel à une procédure stockée à laquelle je passe des paramètres. Le premier appel passe mais pas les autres; à partir de la deuxième tentatve le message d'erreur est quelque chose du genre "[MICROSOFT][SQL][ODBC]... état du curseur incorrect" alors qu'en créant la connection à la base, je spécifie à SQL qu'il doit gérer lui ledit curseur. D'ailleur, je ne sais pas comment modifier la valeur di curseur. Quelqu'un saurait-il me dire d'où vient le problème.ss
 
PS : là j'ai pas de code étant donné que je suis pas au travail, je compte sur vous. Je vais me coucher, @ demain

Reply

Marsh Posté le 07-01-2001 à 00:46:09   

Reply

Marsh Posté le 08-01-2001 à 10:00:59    

Peux-tu m'indiquer le code de creation de ta connection.
 
Merci
 
A+

Reply

Marsh Posté le 08-01-2001 à 10:46:50    

J'aurais tendance à penser que tu a pas fermé ton curseur dans la procédure stockée, car SQL Server garde les curseurs en mémoire
 
CLOSE Curseur
DEALLOCATE Curseur

Reply

Marsh Posté le 08-01-2001 à 11:20:36    

Peux tu egalement nous decririre la procedure stockee.
 
Est-ce qu'il y a des curseurs ?
Est-ce qu'il y a une gestion de transactions ?
A+

Reply

Marsh Posté le 08-01-2001 à 11:41:07    

A RalphXML >ss
bool CstockeDB::ConnectDataBase(){
 
 
 if (!strlen((char *)session_id)) return false;
 retcode2 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv2);
 if (retcode2!=SQL_SUCCESS && retcode2!=SQL_SUCCESS_WITH_INFO){
ssCloseConnection();
ssfprintf(fd,"1 - SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv2); n'a pas marché, renvoyant "%d"
",retcode2);
ssreturn false;
 }
 retcode2 = SQLSetEnvAttr(henv2, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
 if (retcode2!=SQL_SUCCESS && retcode2!=SQL_SUCCESS_WITH_INFO){
ssCloseConnection();
ssfprintf(fd,"2 - SQLSetEnvAttr(henv2, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); n'a pas marché, renvoyant "%d"
",retcode2);
ssreturn false;
 }
 retcode2 = SQLAllocHandle(SQL_HANDLE_DBC, henv2, &hdbc2);
 if (retcode2!=SQL_SUCCESS && retcode2!=SQL_SUCCESS_WITH_INFO){
ssCloseConnection();
ssfprintf(fd,"3 - SQLAllocHandle(SQL_HANDLE_DBC, henv2, &hdbc2); n'a pas marché, renvoyant "%d"
",retcode2);
ssreturn false;
 }
 retcode2 = SQLConnect(hdbc2,dsn, SQL_NTS,(SQLCHAR*) "sa", SQL_NTS,(SQLCHAR*) "caron73", SQL_NTS);
 if (retcode2 != SQL_SUCCESS && retcode2 != SQL_SUCCESS_WITH_INFO){
ssCloseConnection();
ssfprintf(fd,"4 - SQLConnect(hdbc2,dsn, SQL_NTS,(SQLCHAR*) "sa", SQL_NTS,(SQLCHAR*) "caron73", SQL_NTS); n'a pas marché, renvoyant "%d"
",retcode2);
ssreturn false;
 }
 retcode2 = SQLAllocHandle(SQL_HANDLE_STMT, hdbc2, &hstmt2);ss
 if (retcode2 == SQL_SUCCESS || retcode2 == SQL_SUCCESS_WITH_INFO){
ssconnected=true;
ssreturn true;
 }
 else{
ssCloseConnection();
ssfprintf(fd,"5 - SQLAllocHandle(SQL_HANDLE_STMT, hdbc2, &hstmt2); n'a pas marché, renvoyant "%d"
",retcode2);
ssreturn false;
 }
}
 
 
Les membres privés sont :
 
 char message[NB_MESS][1000];
 SQLHDBC hdbc2;
 SQLHENV henv2;
 SQLRETURNssretcode2;
 SQLHSTMT hstmt2;
 unsigned char strsql2[1024]/*,table1[512],table2[512]*/,chaine[65535],dsn[512],session_id[14];
ss
 bool connected,dja;
 FILE *fd;
 SQLCHAR user[256],pass[256];

Reply

Marsh Posté le 08-01-2001 à 14:04:50    

Ca me semble correct au niveau de la connection.
Il faut peux-etre regarder la proc stock au niveau de curseur etc..
J'aimerai savoir si tu ouvres ta connection une fois pour toute a ta premiere requete ou si tu utilise cette methode de connection a chaque interrogation DB.
 
A+

Reply

Marsh Posté le 08-01-2001 à 14:26:26    

Merci RalphXML , je ne me connecte qu'une seule fois de cette façon. La prod stock est d'une simplicité "biblique" :
 
¤
CREATE PROCEDURE DeclareSession @sid varchar(100),@etat int,@commentaire varchar(500) AS
 
if exists(select * from session where s_id=@sid)
begin
 update session set s_etat = @etat,s_commentaire = @commentaire where s_id=@sid
end
else
begin
 insert into session values(@sid,@etat,@commentaire)
end
¤
 
voilu, voila.

Reply

Marsh Posté le 08-01-2001 à 14:47:03    

Tu n'a pas de gestion de transaction dans ta proc stock (ou enssehors) ?
 
Pour l'instant je seche.
 
A+

Reply

Marsh Posté le 08-01-2001 à 15:07:22    

Ouais rien d'anormal
T'as bien le SP2 pour SQL Server ?
on sait jamais avec Microsoftss
a+

Reply

Marsh Posté le 31-01-2001 à 16:37:25    

OOOOOh salut les gars (je crois qu'il n'y a pas de filles dans ce forum), je continue à piétiner ... N'y aurait-il pas quelqu'un avec une solution à me proposer ???

Reply

Marsh Posté le 31-01-2001 à 16:37:25   

Reply

Marsh Posté le 31-01-2001 à 17:11:30    

zopzop .... zopzop...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 31-01-2001 à 17:36:49    

Mais encore ... :confused:

Reply

Marsh Posté le 31-01-2001 à 17:52:41    

zopzop .... zopzop .... zopzop .... zopzop
 
encoress
 
zopzop....zopzop....zopzop....zopzop


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 31-01-2001 à 20:45:00    

Navré, je sèche aussi !
Demain j'essaierai de consulter MSDN pour me renseigner plus avant sur les problèmes référencés liés aux curseurs.
 
A+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed