Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pb de verrous

1 réponse
Avatar
Pierre-Yves
Bonjour,

je programme sur une base sql server en utilisant ADO de VBA.
j'utilise des curseurs.
La fonction qui suit génère le message d'erreur suivant au niveau de
l'instruction rstable1.update
"Echec du contrôle de la concurrence d'accès optimisée.La ligne a été
modifiée en dehors du curseur."
cette même fonction marche très bien avec access. Comment cela se fait-il?

Function essai()

Dim cnn As New ADODB.Connection
Dim sql As String
Dim rstable1 As New ADODB.Recordset
Dim rstable2 As New ADODB.Recordset

cnn.Open "Provider=SQLOLEDB.1;Data
source=SERVEURSQL;UID=sa;PWD=sa;Database=testorigine" & ";"


sql = "select * from personnel1"
rstable1.Open sql, cnn, adOpenDynamic, adLockOptimistic
rstable1.MoveFirst

sql = "select * from personnel1"
rstable2.Open sql, cnn, adOpenDynamic, adLockOptimistic
rstable2.MoveFirst

rstable2("nom") = "essai3"
rstable2.Update

rstable2.Close
Set rstable2 = Nothing

rstable1("prenom") = "encore2"
rstable1.Update


End Function

1 réponse

Avatar
Fred BROUARD
tu utilises un verrouillage optimiste... Donc possibilité de perte du
ticket de version...
Passe en verouilage pessismiste.

Ce genre de manip est pluôt à faire côté serveur dans une proc stock
transactionnée

Pierre-Yves a écrit:
Bonjour,

je programme sur une base sql server en utilisant ADO de VBA.
j'utilise des curseurs.
La fonction qui suit génère le message d'erreur suivant au niveau de
l'instruction rstable1.update
"Echec du contrôle de la concurrence d'accès optimisée.La ligne a été
modifiée en dehors du curseur."
cette même fonction marche très bien avec access. Comment cela se fait-il?

Function essai()

Dim cnn As New ADODB.Connection
Dim sql As String
Dim rstable1 As New ADODB.Recordset
Dim rstable2 As New ADODB.Recordset

cnn.Open "Provider=SQLOLEDB.1;Data
source=SERVEURSQL;UID=sa;PWD=sa;Database=testorigine" & ";"


sql = "select * from personnel1"
rstable1.Open sql, cnn, adOpenDynamic, adLockOptimistic
rstable1.MoveFirst

sql = "select * from personnel1"
rstable2.Open sql, cnn, adOpenDynamic, adLockOptimistic
rstable2.MoveFirst

rstable2("nom") = "essai3"
rstable2.Update

rstable2.Close
Set rstable2 = Nothing

rstable1("prenom") = "encore2"
rstable1.Update


End Function





--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************