Габлица 3 Значения свойства EditMode набора записей ADO

Константа Описание
adEditNone Редактирование не выполняется.
adEditInProgress Данные в текущей записи изменились, но сохранение еще не выполнялось.
adEditAdd Данное значение свойство EditMode принимает после вызова метода AddNew. Оно показывает, что буфер копирования содержит еще не сохраненную новую запись.
adEditDelete Текущая запись была удалена.

Значение свойства EditMode отражает состояние буфера, используемого для создания и редактирова­ния записей. Оно используется, когда при выходе из режима редактирования выбран соответствующий метод (Update или CancelUpdate).

Тестирование блокировок

Применяемые к записям блокировки можно протестировать, просмотрев значения свойств LockType и EditMode, но обычно гораздо более важно выяснить тип блокировки, налагаемой другим пользователем на требуемые данные. Единственный способ выполнения поставленной задачи фактически состоит в не- обходимости вызова ошибки конфликта доступа.

При возникновении ошибки провайдер OLEDB Jet выдает определенную информацию о типе блоки­ровки, применяемой другим пользователем. В случае конфликта следует проверить свойство подключения:

Connection.Errors(index). SQLState

для точного выяснения вида возникшей ошибки. В табл. 4 приводятся некоторые коды ошибок конф-ликта доступа, возвращаемые при обращении к свойству .SQLState.

Таблица 4 Коды ошибок блокировки, возвращаемые поставщиком Jet 4.0 OLEDB

Код Сообщение
3006 Database <name> is exclusively locked. (База данных <имя> используется в монопольном режиме.)
3008 The table <name> is already opened by another user, or it's already open through the user interface and can't be manipulated programmatically. (База данных <имя> уже открыта другим пользователем, либо она открыта посредством пользовательского интерфейса, и ее программная обработка запрещена.)

Таблица 4 Коды ошибок блокировки, возвращаемые провайдером Jet 4.0 OLEDB (продолжение)

Код Сообщение
3009 You tried to lock table <tablename> while opening it, but the table can't be locked because it's currently in use. Wait a moment, and then try the operation again. (Предпринята попытка блокировки таблицы <имятаблицы>, но эта операция невозможна, поскольку в данный момент таблица используется. Подождите немного, а затем повторите попытку.)
3027 Can't update; database or object is read-only. (Обновление невозможно. База данных или объект доступен только для чтения.)
3046 Couldn't save; currently locked by another user. (Сохранение невозможно. Объект блокирован другим пользователем.)
3158 Couldn't save record; currently locked by another user. (Сохранение записи невозможно. Она блокирована другим пользователем.)
3164 The field can't be updated because another user or process has locked the corresponding record or table. (Обновление поля невозможно, поскольку соответствующая запись или таблица блокирована другим пользователем либо процессом.)
3186 Couldn't save; currently locked by user <name> on machine <name>. (Сохранение невозможно. Объект блокирован пользователем <имя> на компьютере <имя>.)
3187 Couldn't read; currently locked by user <name> on machine <name>. (Чтение невозможно. Объект блокирован пользователем <имя> на компьютере <имя>.)
3188 Couldn't update; currently locked by another session on this machine. (Обновление невозможно. Объект блокирован в течение другого сеанса работы на этом компьютере.)
3189 Table <name> is exclusively locked by user <name> on machine <name>. (Таблица <имя> блокирована в монопольном режиме пользователем <имя> на компьютере <имя>.)
3197 The Microsoft Jet database engine stopped the process because you and another user are attempting to change the same data at the same time. (Механизм баз данных Microsoft Jet остановил процесс вследствие одновременной попытки двух пользователей изменить одни и те же данные.)
3202 Couldn't save; currently locked by another user. (Сохранение невозможно. Объект блокирован другим пользователем.)
3211 The database engine couldn't lock table <name> because it's already in use by another person or process. (Механизм баз данных не выполнил блокировку таблицы <имя>, поскольку она уже используется другим лицом либо процессом.)
3212 Couldn't update; currently locked. (Обновление невозможно. Объект блокирован.)
3218 Couldn't update; currently locked by user <name> on machine <name>. (Обновление невозможно. Объект блокирован пользователем <имя> на компьютере <имя>.)
3260 Table <name> is exclusively locked by user <name> on machine <name>. (Таблица <имя> блокирована в монопольном режиме пользователем <имя> на компьютере <имя>.)
3261 Couldn't lock table <name>; currently in use by user <name> on machine <name>. (Блокировка таблицы <имя> невозможна. Таблица используется пользователем <имя> на компьютере <имя>.)

Массив ошибок также содержит и другую потенциально полезную информацию об ошибке блокиров­ки: данные о блокировке, используемой другим пользователем. Свойства NativeError и Number сообща­ют о блокировке, препятствующей выполнению требуемой операции. Сочетания этих свойств и их значения приведены в табл. 5.

Таблица 5 Сочетания свойств NativeError и Number объекта Connection. Errors для иденти­фикации типа блокировки

Пользователь Свойство Значение Тип блокировки
Данный пользователь Connection.Errors(0).NativeError -533791822 Пессимистическая
Данный пользователь Connection.Errors(O).Number -105514571 Оптимистическая
Другой пользователь Connection.Errors(O).NativeEr -2147467259 Пессимистическая
Другой пользователь Connection.Errors(O).Number -2147217887 Оптимистическая

На данном этапе смысл этих значений не совсем очевиден, разве что их можно использовать при выборе момента для еще одной попытки обновления данных. Однако реальную ситуацию, когда они могут понадобиться, предвидеть трудно. Пока будем считать их применение делом будущего.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: