HELP ADO : No transaction is active ????????????????????

cs_globule Messages postés 327 Date d'inscription mardi 8 octobre 2002 Statut Membre Dernière intervention 6 octobre 2010 - 28 sept. 2005 à 11:49
cs_globule Messages postés 327 Date d'inscription mardi 8 octobre 2002 Statut Membre Dernière intervention 6 octobre 2010 - 28 sept. 2005 à 13:37
Bonjour, j'utilise le code suivant pour gérer l' erreur ADO "la table est verouillée", car en reseau access ne semble par tenir le cou sans ca sur des grosses bases
Cela fonctionne,
Mais sur un de mes clients j'obtiens systematiquement le code -2147168242, ce qui correspond à No transaction is active
Seul son poste principal pose probleme, les autres postes fonctionnent.
Comment est il possible d'avoir un message "No transaction is active" alors qu'on passe systematiquement par Ado.BeginTrans, C'est incomprehensible

Refaire1:
Err.Number = 0
On Error Resume Next

Ado.BeginTrans

RS.AddNew

RS.fields("Nom").value = "TOTO"


RS.Update

Ado.CommitTrans

If Err.Number <> 0 Then GoTo RStrans_Err1
Err.Number = 0: Err.Clear 'au choix
On Error GoTo 0 ' fin de la gestion d’erreur



exit sub


RStrans_Err1:
If InStr(CStr(Err.Number), "2147") > 0 Then
Ado.RollbackTrans
RS.CancelUpdate
Pause GTimeSleepBD

Err.Clear
GoTo Refaire1
End If


Exit Sub

2 réponses

mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
28 sept. 2005 à 13:22
Salut,



Après une brève (mais intense) analyse :

Le problème peut arriver si tu as une erreur qqe part dans cette partie du code :

Ado.BeginTrans

RS.AddNew

RS.fields("Nom").value = "TOTO"

RS.Update

Ado.CommitTrans



Supposons qu'une erreur se produise sur RS.Update :

Comme tu fais un On Error Resume Next, tu exécutes qd même Ado.CommitTrans. Donc ta transaction se ferme.

Cependant comme il y a eu une erreur, Err.Number est différent de 0

> ton instruction If Err.Number <> 0 Then GoTo RStrans_Err1 t'envoie en RStrans_Err1:

et si ton test If Instr(...) Then est validé, tu fais un Rollback sur une transaction fermée.



CQFD

Conclusion, au lieu de mettre

On Error Resume Next

tu devrais peut être mettre

On Error Goto RStrans_Err1

et virer

If Err.Number <> 0 Then GoTo RStrans_Err1

Err.Number = 0: Err.Clear 'au choix

On Error GoTo 0 ' fin de la gestion d’erreur
0
cs_globule Messages postés 327 Date d'inscription mardi 8 octobre 2002 Statut Membre Dernière intervention 6 octobre 2010
28 sept. 2005 à 13:37
En fait j'ai trouvé il suffit de supprimer
Ado.RollbackTrans
Et ca fonctionne, j'avais deja essayé avec le On Error Goto RStrans_Err1
mais le traitement d'erreur ne fonctionnait plus correctement (surtout si on avait 2 gestions dans la même procedure)
0
Rejoignez-nous