OVH Cloud OVH Cloud

urgent: transaction en asp de l'aide svp

3 réponses
Avatar
bariabdellatif
voila le code de ma page asp :


Set conn= Server.CreateObject("ADODB.Connection")
conn.Open "driver={SQL Server};................


'debut d'une transaction
conn.BeginTrans
......
tratiement
......
SQLCode="INSERT INTO .......
conn.Execute(SQLCode)

SQLCode="UPDATE MATABLE SET.......
conn.Execute(SQLCode)

SQLCode="INSERT INTO .......
conn.Execute(SQLCode)

if erreur<>0 then
conn.RollbackTrans
else
DBase.CommitTrans
end if



voila l'erreur que ca donne:
"Une transaction ne peut pas avoir plusieurs jeux d'enregistrements
avec ce type de curseur. Choisissez un autre type de curseur ou
validez la transaction, ou bien encore, fermez un des jeux
d'enregistrements.,Microsoft OLE DB Provider for ODBC Drivers"

merci de m'aider

3 réponses

Avatar
Pierre Goiffon
"fabien" a écrit dans le message de
news:
Set conn= Server.CreateObject("ADODB.Connection")
conn.Open "driver={SQL Server};................

'debut d'une transaction
conn.BeginTrans
......
tratiement
......
SQLCode="INSERT INTO .......
conn.Execute(SQLCode)

SQLCode="UPDATE MATABLE SET.......
conn.Execute(SQLCode)

SQLCode="INSERT INTO .......
conn.Execute(SQLCode)

if erreur<>0 then
conn.RollbackTrans
else
DBase.CommitTrans
end if

voila l'erreur que ca donne:
"Une transaction ne peut pas avoir plusieurs jeux d'enregistrements
avec ce type de curseur. Choisissez un autre type de curseur ou
validez la transaction, ou bien encore, fermez un des jeux
d'enregistrements.,Microsoft OLE DB Provider for ODBC Drivers"



Comme l'indique le message d'erreur, ce sont les curseurs choisis lors du
conn.open qui posent prb. Quelle est donc la ligne complète ? Référez vous à
la doc ADO pour trouver les bonnes valeurs de curseur (de mémoire, c'est 3,
3, 1 qui est bien souvent la bonne combinaison)
Avatar
bruno reiter [MVP]
il est généralement plus sain de passer par une procédure stockée serveur et
de faire les transactions dans la procédure et pas dans le code.

br

"fabien" wrote in message
news:
voila le code de ma page asp :


Set conn= Server.CreateObject("ADODB.Connection")
conn.Open "driver={SQL Server};................


'debut d'une transaction
conn.BeginTrans
......
tratiement
......
SQLCode="INSERT INTO .......
conn.Execute(SQLCode)

SQLCode="UPDATE MATABLE SET.......
conn.Execute(SQLCode)

SQLCode="INSERT INTO .......
conn.Execute(SQLCode)

if erreur<>0 then
conn.RollbackTrans
else
DBase.CommitTrans
end if



voila l'erreur que ca donne:
"Une transaction ne peut pas avoir plusieurs jeux d'enregistrements
avec ce type de curseur. Choisissez un autre type de curseur ou
validez la transaction, ou bien encore, fermez un des jeux
d'enregistrements.,Microsoft OLE DB Provider for ODBC Drivers"

merci de m'aider


Avatar
Pierre Goiffon
"bruno reiter [MVP]" <remove.this! a écrit dans le
message de news:
il est généralement plus sain de passer par une procédure stockée
serveur et de faire les transactions dans la procédure et pas dans le
code.



Et... je confirme chaudement !
ADO c'est bien sympa, mais surtout en ASP, ça devient vite compliqué à
gérer. Autant s'appuyer sur des fonctionnalités du SGBD, ribustes et qui
fonctionnent. Certes, ça n'aide pas forcément à la portabilité mais on n'a
rien sans rien