Описание
Задает или возвращает значение, определяющее режим блокировки,
который будет действовать при изменении записей.
Значение
Задаваемое или возвращаемое значение является выражением типа
Boolean, указывающим режим блокировки, описание которого приведено в
следующей таблице.
True По умолчанию. Определяет режим жесткой блокировки. Страница размером 2 Кбайт, содержащая изменяемую запись, будет заблокирована сразу после вызова метода Edit. False Определяет режим нежесткой блокировки. Содержащая запись страница размером 2 Кбайт не будет заблокирована до вызова метод Update.
Замечания
Свойство 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