OVH Cloud OVH Cloud

ADO Transaction finie

3 réponses
Avatar
Renaud
Marseille, le 30/10/03
Bonjour =E0 tous.

Dans le code qui suit, la requ=EAte update du paragraphe=20
11.3 n'est pas ex=E9cut=E9e si les lignes de "ralentisseur"=20
sont absentes.
Pourquoi ? Qelle est la solution s=E9rieuse =E0 ce probl=E8me ?

Merci
Renaud
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D
'*** Calcul de la liste de tous les dossiers concern=E9s ***
recTMP.Source =3D "SELECT * FROM Dossiers WHERE UCASE
(Reporting)=3D'E'"
recTMP.Open

recTMP.MoveFirst
Do
'*** Ouverture de la connexion au dossier ***
strCnn =3D _
"Provider=3DMicrosoft.Jet.OLEDB.4.0;Persist Security=20
Info=3DFalse;Data Source=3D" + _
strCheminI + recTMP.Fields("DosQuad")=20
& "\qcompta.mdb"
Set cnnCompta =3D New ADODB.Connection
cnnCompta.ConnectionString =3D strCnn
cnnCompta.Open
=20
'*** Cr=E9ation d'une commande pour la connexion ***
Set cmdCompta =3D New ADODB.Command
cmdCompta.ActiveConnection =3D cnnCompta
=20
'*** 11.1 R=E9cup=E9ration dans tmpMouvements des mouvements=20
analytiques seuls ***
cnnCompta.BeginTrans

strSQLInt=20
=3D "`;Database=3Dc:\Windows\Bureau\scr.alf.rpt.Temporaire.mdb;
Hdr=3DYes`.`tmpMouvements`"
strSQLIns =3D ... clause insert
strSQLSel =3D "'" + recTMP.Fields("Dos") + "'",...,"'" +=20
recTMP.Fields("DosQuad") + "'"
strSQLFro =3D ... clause from
strSQLWhe =3D ... clause where

Call sub05SQLAjout(cmdCompta, strSQLInt, strSQLIns,=20
strSQLSel, strSQLFro, strSQLWhe)
'sub05SQLAjout fabrique la requ=EAte ajout dans=20
strsql
'strsql =3D concat=E9nation des str ci dessus et des=20
mots cl=E9s sql
'cmdCompta.CommandText =3D strSQL
'cmdCompta.Execute
=20
cnnCompta.CommitTrans

'*** 11.2 R=E9cup=E9ration dans tmpMouvements de tous les=20
mouvements de g=E9n=E9rale ***
cnnCompta.BeginTrans

strSQLInt =3D ... identique =E0 11.1
strSQLIns =3D ... identique =E0 11.1
strSQLSel =3D ... identique =E0 11.1
strSQLFro =3D ... diff=E9rent de 11.1
strSQLWhe =3D ... diff=E9rent de 11.1
=20
Call sub05SQLAjout(cmdCompta, strSQLInt, strSQLIns,=20
strSQLSel, strSQLFro, strSQLWhe)
'sub05SQLAjout identique =E0 11.1
=20
cnnCompta.CommitTrans
=20
'*** 11.3 Marquage dans tmpMouvements des mouvements de=20
g=E9n=E9rale ventil=E9s en analytique ***
'Ralentisseur
PlombD=E9but =3D Time
Do While Time < DateAdd("s", 2, PlombD=E9but)
Loop
'Ralentisseur, fin
=20
cnnTMP.BeginTrans

strSQLTbl =3D "tmpMouvements AS M1 LEFT JOIN ...
strSQLSet =3D "M1.Sta =3D 'Del'"
strSQLWhe =3D clause where
=20
Call sub06SQLM=E0j(cmdTMP, strSQLTbl, strSQLSet,=20
strSQLWhe)
' sub06SQLM=E0j fabrique une requ=EAte update

cnnTMP.CommitTrans
cnnCompta.Close
=20
recTMP.MoveNext
Loop While Not recTMP.EOF

3 réponses

Avatar
jmn
Il faudrait voir le code complet, car dans votre exemple il n'y a pas
d'EXECUTE de la requête ! Cela suffirait à expliquer la non exécution, ais
j'imagine que l'instruction existe dans le VRAI code...

'*** 11.3 Marquage dans tmpMouvements des mouvements de générale ventilés en
analytique ***
'Ralentisseur
PlombDébut = Time
Do While Time < DateAdd("s", 2, PlombDébut)
Loop
'Ralentisseur, fin
cnnTMP.BeginTrans
strSQLTbl = "tmpMouvements AS M1 LEFT JOIN ...
strSQLSet = "M1.Sta = 'Del'"
strSQLWhe = clause where
Call sub06SQLMàj(cmdTMP, strSQLTbl, strSQLSet, strSQLWhe)
' sub06SQLMàj fabrique une requête update

??? EXECUTE ???

cnnTMP.CommitTrans
cnnCompta.Close
recTMP.MoveNext
Loop While Not recTMP.EOF
Avatar
Renaud
Marseille, le 30/10/03 14:30
jmn,

D'abord merci pour votre mot.
Votre imagination ne vous joue aucun tour et l'execute est
présent dans le paragraphe 11.3 (comme dans les
paragraphes 11.1 et 11.2). Sinon, comment expliqueriez vous
que la requête soit exécutée lorsque le ralentisseur est
présent.
Pour explorer votre hypothèse, voici les lignes de
sub06SQLMàj(cmdTMP, strSQLTbl, strSQLSet, strSQLWhe) qui
sont d'ailleurs de la même eau que sub06SQLAjout :

========================= ========================= =========
=====
Private Sub sub06SQLMàj(cmdTMP, strSQLTbl, strSQLSet,
strSQLWhe)

Dim strSQL As String
'... concaténation des strsql(tbl, set et whe) passées en
une strsql

cmdTMP.CommandText = strSQL
cmdTMP.Execute

End Sub
========================= ========================= =========
=====
Avatar
jmn
Cela ressemble à un problème de fonctionnement asynchrone de l'instruction
précédente, alors que bien entendu, par défaut, les exécutions devraient
être synchrones !
Si vous pouvez, jetez un coup d'oeil dans MSDN Library : ADO Programmer's
guide, Section V, appendice A (Microsoft OLE DB provider for microsoft JET)
qui décrit quelques paramètres pouvant influencer le fonctionnement d'ADO
(et le forçage en mode asynchrone de l'execute sur l'objet command).
Bonne chance.