Partager via


Recordset.LockEdits, propriété (DAO)

S’applique à : Access 2013, Office 2013

Définit ou renvoie une valeur indiquant le type de verrouillage qui est appliqué lorsque vous effectuez une modification.

Syntaxe

expression . LockEdits

expression Variable représentant un objet Recordset.

Remarques

Le paramètre ou la valeur de retour indique le type de verrouillage, comme indiqué dans le tableau suivant.

Valeur

Description

Vrai

Valeur par défaut. Le verrouillage pessimiste est activé. La page contenant l’enregistrement que vous modifiez est verrouillée dès que vous invoquez la méthode Edit.

Faux

Le verrouillage optimiste est activé pour la modification. La page contenant l’enregistrement n’est pas verrouillée tant que la méthode Update n’est pas exécutée.

Vous pouvez utiliser la propriété LockEdits avec des objets Recordset modifiables.

Si une page est verrouillée, aucun autre utilisateur ne peut modifier des enregistrements sur la même page. Si vous affectez à LockEdits la valeur True et qu'un autre utilisateur a déjà verrouillé la page, une erreur se produit lorsque vous utilisez la méthode Edit. Les autres utilisateurs peuvent néanmoins toujours lire les données des pages verrouillées.

Si vous affectez à la propriété LockEdits la valeur False et que vous utilisez par la suite la méthode Update alors qu'un autre utilisateur a verrouillé la page, une erreur est générée. Pour consulter les modifications apportées à votre enregistrement par un autre utilisateur, appelez la méthode Move avec un argument de valeur 0 ; toutefois, dans ce cas, sachez que vous perdrez vos modifications.

Lorsque vous utilisez des sources de données ODBC connectées au moteur de base de données Microsoft Access, la propriété LockEdits a toujours la valeur False (verrouillage optimiste). Le moteur de base de données Microsoft Access n'a aucun contrôle sur les mécanismes de verrouillage mis en œuvre sur des serveurs de base de données externes.

Remarque

Vous pouvez prédéfinir la valeur de LockEdits lorsque vous ouvrez l’objet Recordset pour la première fois en définissant l’argument lockedits de la méthode OpenRecordset . Le fait de définir l’argument verrouillermodifications sur dbPessimistic définit la propriété LockEdits sur True et le fait de définir verrouillermodifications sur toute autre valeur définit la propriété LockEdits sur False.

Exemple

Cet exemple illustre dans un premier temps le verrouillage pessimiste en affectant à la propriété LockEdits la valeur True et ensuite le verrouillage optimiste en affectant la valeur False à LockEdits. Il montre également le type de gestion d'erreurs requis dans un environnement de base de données multiutilisateur afin de modifier un champ. Les fonctions PessimisticLock et OptimisticLock sont nécessaires à l'exécution de la procédure.

    Sub LockEditsX() 
     
     Dim dbsNorthwind As Database 
     Dim rstCustomers As Recordset 
     Dim strOldName As String 
     
     Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
     Set rstCustomers = _ 
     dbsNorthwind.OpenRecordset("Customers", _ 
     dbOpenDynaset) 
     
     With rstCustomers 
     ' Store original data. 
     strOldName = !CompanyName 
     
     If MsgBox("Pessimistic locking demonstration...", _ 
     vbOKCancel) = vbOK Then 
     
     ' Attempt to modify data with pessimistic locking 
     ' in effect. 
     If PessimisticLock(rstCustomers, !CompanyName, _ 
     "Acme Foods") Then 
     MsgBox "Record successfully edited." 
     
     ' Restore original data... 
     .Edit 
     !CompanyName = strOldName 
     .Update 
     End If 
     
     End If 
     
     If MsgBox("Optimistic locking demonstration...", _ 
     vbOKCancel) = vbOK Then 
     
     ' Attempt to modify data with optimistic locking 
     ' in effect. 
     If OptimisticLock(rstCustomers, !CompanyName, _ 
     "Acme Foods") Then 
     MsgBox "Record successfully edited." 
     
     ' Restore original data... 
     .Edit 
     !CompanyName = strOldName 
     .Update 
     End If 
     
     End If 
     
     .Close 
     End With 
     
     dbsNorthwind.Close 
     
    End Sub 
     
    Function PessimisticLock(rstTemp As Recordset, _ 
     fldTemp As Field, strNew As String) As Boolean 
     
     dim ErrLoop as Error 
     
     PessimisticLock = True 
     
     With rstTemp 
     .LockEdits = True 
     
     ' When you set LockEdits to True, you trap for errors 
     ' when you call the Edit method. 
     On Error GoTo Err_Lock 
     .Edit 
     On Error GoTo 0 
     
     ' If the Edit is still in progress, then no errors 
     ' were triggered; you may modify the data. 
     If .EditMode = dbEditInProgress Then 
     fldTemp = strNew 
     .Update 
     .Bookmark = .LastModified 
     Else 
     ' Retrieve current record to see changes made by 
     ' other user. 
     .Move 0 
     End If 
     
     End With 
     
     Exit Function 
     
    Err_Lock: 
     
     If DBEngine.Errors.Count > 0 Then 
     ' Enumerate the Errors collection. 
     For Each errLoop In DBEngine.Errors 
     MsgBox "Error number: " & errLoop.Number & _ 
     vbCr & errLoop.Description 
     Next errLoop 
     PessimisticLock = False 
     End If 
     
     Resume Next 
     
    End Function 
     
    Function OptimisticLock(rstTemp As Recordset, _ 
     fldTemp As Field, strNew As String) As Boolean 
     
     dim ErrLoop as Error 
     
     OptimisticLock = True 
     
     With rstTemp 
     .LockEdits = False 
     .Edit 
     fldTemp = strNew 
     
     ' When you set LockEdits to False, you trap for errors 
     ' when you call the Update method. 
     On Error GoTo Err_Lock 
     .Update 
     On Error GoTo 0 
     
     ' If there is no Edit in progress, then no errors were 
     ' triggered; you may modify the data. 
     If .EditMode = dbEditNone Then 
     ' Move current record pointer to the most recently 
     ' modified record. 
     .Bookmark = .LastModified 
     Else 
     .CancelUpdate 
     ' Retrieve current record to see changes made by 
     ' other user. 
     .Move 0 
     End If 
     
     End With 
     
     Exit Function 
     
    Err_Lock: 
     
     If DBEngine.Errors.Count > 0 Then 
     ' Enumerate the Errors collection. 
     For Each errLoop In DBEngine.Errors 
     MsgBox "Error number: " & errLoop.Number & _ 
     vbCr & errLoop.Description 
     Next errLoop 
     OptimisticLock = False 
     End If 
     
     Resume Next 
     
    End Function