Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2010, 17h31   #1
Nouveau Membre du Club
 
Homme François
Développeur informatique
Inscription : janvier 2010
Messages : 64
Détails du profil
Informations personnelles :
Nom : Homme François
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : janvier 2010
Messages : 64
Points : 34
Points : 34
Par défaut Activation de transaction

Bonjour,
Je suis confronté depuis le début de la journée à une erreur que je ne parviens pas à résoudre.
Cette erreur se déclenche lorsque j'essaie de valider ou d'annuler une transaction précédemment initiée.
Celà se produit partout dans mon projet, et surtout, ça se produit dans des procédures qui sont validées depuis longtemps et n'on subit aucune modification depuis.
Lorsque l'exécution atteint une instruction "CommitTrans" ou "RollBackTrans" une erreur "Aucune transaction n'est activée" (-2147168242) se déclenche.
Mon projet (.ADP 2010) est associé à une base de données SQL server 2008 Express.
La transaction et les commandes de manipulation des données ADO utilisent un pointeur sur la connexion du projet (voir exemple de code).
J'ai travaillé ces derniers temps sur l'élaboration de procédures stockées utilisant elles-mêmes des transactions qui m'ont amené à utiliser l'option "SET XACT_ABORT" sans doute un peu inconsidérément puisque maintenant je ne sais pas quel est l'état actuel de cette option, sa portée ni son éventuelle implication dans le "gros" problème auquel je suis confronté côté client ADO.

Est-ce que quelqu'un pourrait me fournir des informations un peu plus claires que celles fournies par l'aide en ligne de SQL server sur cette option, le moyen de connaitre son état courant et son influence sur les transaction ouvertes par un client ADO ?

Voici un exemple de code qui provoque l'erreur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
Public Function Enregistrer() As Boolean
 
dim Bdd as adodb.connection
Dim Txt As String
Dim EnTransaction As Boolean
 
Set Bdd = CurrentProject.Connection
 
'--------------------------
On Error GoTo ErrEnregistrer
'--------------------------
 
Bdd.BeginTrans
EnTransaction = True
 
'  Suppression des données initiales
Txt = "DELETE FROM N3132_ZONES_Tarifs WHERE IdZone in (select IdN31 from N31_ZONES_Distribution where IdTransporteur = " & mIdTransporteur & ")"
bdd.Execute Txt
 
'  Report des données temporaires
Txt = "INSERT INTO N3132_ZONES_Tarifs(IdZone, [Date], IdCategorie, IdSeuil, MontantTonne) " & vbNewLine & _
      "SELECT IdZone, [Date], IdCategorie, IdSeuil, MontantTonne" & vbNewLine & _
      "FROM " & mTableTmp & " WHERE MontantTonne is not null "
bdd.Execute Txt
 
If EnTransaction Then
   Bdd.CommitTrans
   EnTransaction = False
End If
 
'--------------------------
FinEnregistrer:
   If EnTransaction Then
      Bdd.RollbackTrans
      EnTransaction = False
   End If
   Exit Function
 
'--------------------------
ErrEnregistrer:
   '	Ici message personnalisé d'information sur l'erreur rencontrée
	Resume FinEnregistrer
Je n'ai pas eu le temps de construire un exemple plus simple à partir d'un nouveau projet connecté à une autre base puis à celle-ci pour avancer dans mon diagnostic mais se sera fait dès demain.
Depite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 07h58   #2
Nouveau Membre du Club
 
Homme François
Développeur informatique
Inscription : janvier 2010
Messages : 64
Détails du profil
Informations personnelles :
Nom : Homme François
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : janvier 2010
Messages : 64
Points : 34
Points : 34
Par défaut Nouvelles données

Bonjour,
Je suis parti sur une fausse piste hier dans mon ouverture de discussion en orientant mon raisonnement vers un éventuel positionnement de l'option XACT_ABORT.
En effet, j'ai utilisé ce matin une version compilée (.ade) de l'application (runtime access 2010) datant d'une quinzainie de jours pour y effectuer le même traitement sur la même base et là tout se passe bien : les transactions sont validées sans erreur.

Puis j'ai compilé le projet actuel fauteur de troubles pour générer un .ade que j'ai utilisé dans le même environnement (runtime Access 2010) et sur la même base SQL : les transactions échouent !

J'ai vérifié sur plusieurs phases du programme utilisant des transactions et toutes échouent avec le même message.

Entre l'application qui fonctionne et le projet actuel il y a eu relativement peu de travaux: complément du menu backstage, ajout de 2 nouveaux formulaires. Pas de modification particulière de l'environement ni de la connexion.

Quelqu'un a-t-il une idée sur une piste à suivre ?
Depite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 08h34   #3
Nouveau Membre du Club
 
Homme François
Développeur informatique
Inscription : janvier 2010
Messages : 64
Détails du profil
Informations personnelles :
Nom : Homme François
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : janvier 2010
Messages : 64
Points : 34
Points : 34
Par défaut Trouvé

Toute mes excuses à celui qui aura commencé à agiter ses méninges à la lecture du problème exposé : il s'agit d'une simple négligence de ma part + un mensonge car j'indique sur la réponse précédente que je n'ai pas changé le mode de connexion et c'est faux:
je ne réfère pas directement l'expression CurrentProject.Connection mais une variable de type ADODB.Connexion déclarée = CurrentProject.Connection.
Hors cette variable - qui plus précisément est une propriété globale - est réaffectée si elle se trouve être différente de CurrentProject.Connection ( if not MaVariable is CurrentProject.Connection then) et il s'avère qu'elle n'est jamais égale!

Donc la variable est renouvellée à chaque invocation et de fait, elle perd ses transactions courantes.

J'ai modifié le code pour comparer les propriétés .connectionString plutot que les objets et tout est rentré dans l'ordre.
Peut-être cette expérience servira-t-elle à quelqu'un, j'en tire deux conclusions :
  1. Vérifier toutes les hypothèses avant de crier au secours
  2. Décrire son problème sur le forum conduit à mieux réfléchir et souvent à trouver soi-même la solution


PS: je ne vois pas comment indiquer que cette discussion est résolue...
Depite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 14h15   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Depite,

Voici un auto-dépannage effectué de main de maître !...

Sinon, pour répondre à ton PS, va dans ton dernier message (bouton "Editer") et appuies sur le bouton "Résolu".
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h54.


 
 
 
 
Partenaires

Hébergement Web