Описание
Задает или возвращает значение, определяющее режим блокировки, который будет действовать при изменении записей.
Значение
Задаваемое или возвращаемое значение является выражением типа Boolean, указывающим режим блокировки, описание которого приведено в следующем списке:
Замечания
Свойство LockEdits применимо к обновляемым объектам Recordset.
Если страница заблокирована, то ни один из других пользователей не сможет изменять записи на этой странице. Если для свойства LockEdits задано значение True, и другой пользователь уже заблокировал страницу, то при вызове метода Edit возникает ошибка. Другим пользователям разрешается чтение данных с блокированных страниц.
Если для свойства LockEdits задано значение False, то ошибка возникает при вызове метода Update для страницы, заблокированной другим пользователем. Для просмотра изменений, внесенных в запись другим пользователем, следует вызвать метод Move с аргументом 0. Однако в этом случае все внесенные вами в запись изменения будут потеряны.
При работе с источниками данных ODBC, подключенными к ядру Microsoft Jet, свойство LockEdits всегда получает значение False, т.е. устанавливается режим нежесткой блокировки. В ядре базы данных Microsoft Jet отсутствуют средства контроля над механизмами блокировки, используемыми на серверах внешних баз данных.
Пользователь имеет возможность установить значение свойства LockEdits при первом открытии объекта Recordset с помощью аргумента блокировки метода OpenRecordset. Указанная в аргументе блокировки константа dbPessimistic задает для свойства LockEdits значение True, а любое другое значение аргумента блокировки устанавливает для свойства LockEdits значение False.
Пример
Следующая программа демонстрирует установление жесткой блокировки с помощью значения True свойства LockEdits, а затем установление нежесткой блокировки с помощью значения False свойства LockEdits. Иллюстрируется также способ обработки ошибок, требуемый при изменении значения поля в сетевой базе данных. Для выполнения данной процедуры требуются функции PessimisticLock и OptimisticLock.
Sub LockEditsX() Dim dbsNorthwind As Database Dim rstCustomers As Recordset Dim strOldName As String Set dbsNorthwind = OpenDatabase("Борей.mdb") Set rstCustomers = dbsNorthwind.OpenRecordset("Клиенты", dbOpenDynaset) With rstCustomers ' Сохраняет исходные данные. strOldName = !Название If MsgBox("Демонстрация жесткой блокировки...", vbOKCancel) = vbOK Then ' Попытка изменить данные при действующей ' жесткой блокировке. If PessimisticLock(rstCustomers, !Название, "Мухомор") Then MsgBox "Запись успешно изменена." ' Восстанавливает исходные данные... .Edit !Название = strOldName .Update End If End If If MsgBox("Демонстрация нежесткой блокировки...", vbOKCancel) = vbOK Then ' Попытка изменить данные при действующей ' нежесткой блокировке. If OptimisticLock(rstCustomers, !Название, "Мухомор") Then MsgBox "Запись успешно изменена." ' Восстанавливает исходные данные... .Edit !Название = 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 ' После задания для свойства LockEdits значения True, ' перехватываются ошибки при вызове метода Edit. On Error GoTo Err_Lock .Edit On Error GoTo 0 ' Если метод Edit еще выполняется, ошибки не возникают; ' пользователь имеет возможность изменять данные. If .EditMode = dbEditInProgress Then fldTemp = strNew .Update .Bookmark = .LastModified Else ' Загружает текущую запись для просмотра изменений, ' сделанных другим пользователем. .Move 0 End If End With Exit Function Err_Lock: If DBEngine.Errors.Count > 0 Then ' Отображает семейство Errors. For Each errLoop In DBEngine.Errors MsgBox "Код ошибки: " & 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 ' После задания для свойства LockEdits значения False, ' перехватываются ошибки при вызове метода Update. On Error GoTo Err_Lock .Update On Error GoTo 0 ' Если метод Edit не выполняется, ошибки не возникают; ' пользователь имеет возможность изменять данные. If .EditMode = dbEditNone Then ' Переводит указатель текущей записи на последнюю ' измененную запись. .Bookmark = .LastModified Else .CancelUpdate ' Загружает текущую запись для просмотра изменений, ' сделанных другим пользователем. .Move 0 End If End With Exit Function Err_Lock: If DBEngine.Errors.Count > 0 Then ' Отображает семейство Errors. For Each errLoop In DBEngine.Errors MsgBox "Код ошибки: " & errLoop.Number & vbCr & errLoop.Description Next errLoop OptimisticLock = False End If Resume Next End Function