OVH Cloud OVH Cloud

Recordset en lecture seule sur projet ADP ?

2 réponses
Avatar
News Groups
Dim cmdCommandForm As ADODB.Command
Dim rstForm As ADODB.Recordset
Dim strCommandText As String

strCommandText = "SELECT B FROM TEST WHERE A='1'"
Bonjour,

Je suis sous Access2002 en projet ADP + SQL Server via OLEDB,
je souhaite mettre à jour un recorset mais par la méthode Update mais cela
est impossible ?? :
je déclare les propriétés de mon recordset de la façon suivante :
With MonRst
.LockType = adLockPessimistic
.CursorType = adOpenDynamic
.CursorLocation = adUseServer ' --- (normalement valeur par
défaut)
End With
mais aprés le chargement du recordset par la méthode :
Set MonRst = MaCommande.Execute()
les propriétés de mon recordset passe automatiquement à :
LockType : "adLockReadOnly "
CursorType : "adOpenStatic"
CursorLocation : "adUseClient"

et donc l'update ne peut s'éxécuter car le recorset est en lecture seule
Je ne comprend pas pourquoi les propriétés change automatiquement après la
méthode Execute ??
quelqu'un peut m'aider à résoudre le probléme ???

Merci encore d'avance,
Thierry.

PS : détail du code :
...
Set MaCommande = New ADODB.Command
MaCommande .ActiveConnection =
Application.CurrentProject.AccessConnection
MaCommande .CommandType = adCmdText
MaCommande .CommandText = strCommandText

Set MonRst = New ADODB.Recordset
With MonRst
.LockType = adLockPessimistic
.CursorType = adOpenDynamic
End With

' la lecture de MonRst.LockType, MonRst.LockType,MonRst.CursorLocation
donne respectivement :
' adLockPessimistic, adOpenDynamic, adUseServer

Set MonRst = MaCommande.Execute()

' la lecture de MonRst.LockType, MonRst.LockType,MonRst.CursorLocation
donne respectivement :
' adLockReadOnly, adOpenStatic, adUseClient ..??!!

MonRst .Update "MonChamp", "MaValeur"

Set MaCommande = Nothing
Set MonRst = Nothing
...

2 réponses

Avatar
Raymond [mvp]
Bonjour.

je souhaite mettre à jour un recorset mais par la méthode Update mais cela
est impossible ?? :


je viens de faire un essai (simple) sur un projet sql2000 local sans passer
par l'objet command et j'ai bien mis à jour par update.
ce qui ne veut pas dire que ça fonctionne sur sqlserver , mais ....
Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
Rs.CursorLocation = adUseClient
Rs.Open "select * from table1", CurrentProject.Connection, adOpenDynamic,
adLockPessimistic
Rs.MoveLast
Rs!Madate = Date
Rs.Update
'ou
'Rs.MoveLast
'Rs.Update "Madate", Date
Set Rs = Nothing

il doit y avoir un truc en passant par command. vérifie.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"News Groups" a écrit dans le message de news:
415d63df$0$27559$
Dim cmdCommandForm As ADODB.Command
Dim rstForm As ADODB.Recordset
Dim strCommandText As String

strCommandText = "SELECT B FROM TEST WHERE A='1'"
Bonjour,

Je suis sous Access2002 en projet ADP + SQL Server via OLEDB,
je souhaite mettre à jour un recorset mais par la méthode Update mais cela
est impossible ?? :
je déclare les propriétés de mon recordset de la façon suivante :
With MonRst
.LockType = adLockPessimistic
.CursorType = adOpenDynamic
.CursorLocation = adUseServer ' --- (normalement valeur par
défaut)
End With
mais aprés le chargement du recordset par la méthode :
Set MonRst = MaCommande.Execute()
les propriétés de mon recordset passe automatiquement à :
LockType : "adLockReadOnly "
CursorType : "adOpenStatic"
CursorLocation : "adUseClient"

et donc l'update ne peut s'éxécuter car le recorset est en lecture seule
Je ne comprend pas pourquoi les propriétés change automatiquement après la
méthode Execute ??
quelqu'un peut m'aider à résoudre le probléme ???

Merci encore d'avance,
Thierry.

PS : détail du code :
...
Set MaCommande = New ADODB.Command
MaCommande .ActiveConnection > Application.CurrentProject.AccessConnection
MaCommande .CommandType = adCmdText
MaCommande .CommandText = strCommandText

Set MonRst = New ADODB.Recordset
With MonRst
.LockType = adLockPessimistic
.CursorType = adOpenDynamic
End With

' la lecture de MonRst.LockType, MonRst.LockType,MonRst.CursorLocation
donne respectivement :
' adLockPessimistic, adOpenDynamic, adUseServer

Set MonRst = MaCommande.Execute()

' la lecture de MonRst.LockType, MonRst.LockType,MonRst.CursorLocation
donne respectivement :
' adLockReadOnly, adOpenStatic, adUseClient ..??!!

MonRst .Update "MonChamp", "MaValeur"

Set MaCommande = Nothing
Set MonRst = Nothing
...





Avatar
Sylvain Lafontaine
Si vous mettez un groupe de paramètres dont la combinaison est invalide ou
entre en conflit avec la gestion interne des transactions par Access, ADO va
les remplacer par des valeurs par défaut.

Je ne sais pas si l'utilisation de adLockPessimistic, de adOpenDynamic et de
adUseServer est vraiment nécessaire dans votre cas mais dans le cas
contraire, remplacez-le par des valeurs plus orthodoxes:

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open cmd, , adOpenStatic, adLockOptimistic

S. L.


"News Groups" wrote in message
news:415d63df$0$27559$
Dim cmdCommandForm As ADODB.Command
Dim rstForm As ADODB.Recordset
Dim strCommandText As String

strCommandText = "SELECT B FROM TEST WHERE A='1'"
Bonjour,

Je suis sous Access2002 en projet ADP + SQL Server via OLEDB,
je souhaite mettre à jour un recorset mais par la méthode Update mais cela
est impossible ?? :
je déclare les propriétés de mon recordset de la façon suivante :
With MonRst
.LockType = adLockPessimistic
.CursorType = adOpenDynamic
.CursorLocation = adUseServer ' --- (normalement valeur par
défaut)
End With
mais aprés le chargement du recordset par la méthode :
Set MonRst = MaCommande.Execute()
les propriétés de mon recordset passe automatiquement à :
LockType : "adLockReadOnly "
CursorType : "adOpenStatic"
CursorLocation : "adUseClient"

et donc l'update ne peut s'éxécuter car le recorset est en lecture seule
Je ne comprend pas pourquoi les propriétés change automatiquement après la
méthode Execute ??
quelqu'un peut m'aider à résoudre le probléme ???

Merci encore d'avance,
Thierry.

PS : détail du code :
...
Set MaCommande = New ADODB.Command
MaCommande .ActiveConnection > Application.CurrentProject.AccessConnection
MaCommande .CommandType = adCmdText
MaCommande .CommandText = strCommandText

Set MonRst = New ADODB.Recordset
With MonRst
.LockType = adLockPessimistic
.CursorType = adOpenDynamic
End With

' la lecture de MonRst.LockType, MonRst.LockType,MonRst.CursorLocation
donne respectivement :
' adLockPessimistic, adOpenDynamic, adUseServer

Set MonRst = MaCommande.Execute()

' la lecture de MonRst.LockType, MonRst.LockType,MonRst.CursorLocation
donne respectivement :
' adLockReadOnly, adOpenStatic, adUseClient ..??!!

MonRst .Update "MonChamp", "MaValeur"

Set MaCommande = Nothing
Set MonRst = Nothing
...