pb de verrous

Le
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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred BROUARD
Le #11719601
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: ******************
Publicité
Poster une réponse
Anonyme