Поделиться через


Свойство Recordset.LockEdits (DAO)

Область применения: Access 2013, Office 2013

Задает или возвращает значение, определяющее тип блокировки, которая действует во время редактирования.

Синтаксис

expression . LockEdits

expression: переменная, представляющая объект Recordset.

Примечания

Параметр или возвращаемое значение указывает тип блокировки, как указано в следующей таблице.

Значение

Описание

Верно

Значение, используемое по умолчанию. Действует пессимистичная блокировка. Страница, содержащая редактируемую запись, блокируется сразу после вызова метода Edit.

Неверно

Оптимистическая блокировка применяется для редактирования. Страница, содержащая запись, не блокируется до выполнения метода Update.

Свойство LockEdits можно использовать с обновляемыми объектами Recordset .

Если страница заблокирована, другие пользователи не смогут изменять записи на той же странице. Если для параметра LockEdits заданозначение True , а страница уже заблокирована другим пользователем, при использовании метода Edit возникнет ошибка. Другие пользователи могут считывать данные с заблокированных страниц.

Если задать для свойства LockEdits значение False , а затем использовать метод Update , когда страница заблокирована другим пользователем, возникнет ошибка. Чтобы просмотреть изменения, внесенные в запись другим пользователем, используйте метод Move с 0 в качестве аргумента ; однако в этом случае изменения будут потеряны.

При работе с источниками данных ODBC, подключенными к ядру СУБД Microsoft Access, свойство LockEdits всегда имеет значение False или оптимистическая блокировка. Ядро СУБД Microsoft Access не контролирует механизмы блокировки, используемые на внешних серверах баз данных.

Примечание.

Вы можете предварительно задать значение LockEdits при первом открытии набора записей , задав аргумент lockedits метода OpenRecordset . Если для аргумента lockedits задано значение dbPessimistic , для свойства LockEdits будет задано значение True, а для параметра lockedits — любое другое значение, для свойства LockEdits будет присвоено значение False.

Пример

В этом примере демонстрируется пессимистичная блокировка, задав для свойства LockEdits значение True, а затем демонстрируется оптимистическая блокировка, задав для свойства LockEdits значение False. В нем также показано, какой тип обработки ошибок требуется в среде многопользовательской базы данных для изменения поля. Для выполнения этой процедуры требуются функции PessimisticLock и OptimisticLock.

    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