powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Коды блокировок (native)
18 сообщений из 18, страница 1 из 1
Коды блокировок (native)
    #32175018
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда происходит ошибка при обращении к записи, мне нужно узнать, блокировка это или нет. В моём распоряжении (обращение через ODBC) есть SQLSTATE (как правило, S1000) и код native (специфический для Access'a).

Вопрос: какие коды native соответствуют тем или иным событиям блокировки и/или где это можно прочитать?
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32175034
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сам Майкрософт обычно в таких случаях советует взять Error$ и проверить, есть ли в нем слово locked. Правда, я это видел в случае без ODBC.
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32175082
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, это позорище, во-вторых, сообщения бывают и не по-английски, в третьих, где они это советуют, дайте, пожалуйста, ссылку.
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32175222
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
С во-первых и во-вторых согласен. А в-третьих, как Вам нравится во-первых... Короче, ссылки нет, потому что это советовал приглашенный за деньги консультант от фирмы Майкрософт. Как звать, не помню. :^)

Я все-таки надеюсь, что в этот топик зайдут более знающие люди и посоветуют что-нибудь еще.
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178284
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что не зайдёт, особенно если тему не поднять...

Мы подошли к этой проблеме экспериментально: как выскочит сообщение о блокировке, сразу добавляем его код в соответствующий массив.
Если кто-то поступает так же, готов махнуться кодами :)
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178474
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Мне известны два варианта. Один похож на Ваш (там постоянно росла строчка Case в операторе Select Case Err), другой тот, который я предложил. По-моему, мой надежнее. :^)

Если у Вас есть какой-то список кодов, пусть и неполный, посмотрите на их тексты и убедитесь, что слово locked присутствует во всех. Либо, если у Вас не на английском, какое-нибудь другое слово.

Кстати, есть третий вариант. Поставить метки перед той строкой, где случается ошибка, и после. И проверять не Err, а Erl. Если ошибка происходит именно в этой строке, то это либо блокировка, либо вообще база накрылась.
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178503
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у Вас есть какой-то список кодов, пусть и неполный, посмотрите на их тексты и убедитесь, что слово locked присутствует во всех.
У меня нет списка текстов к кодам, но слово было, да, иначе мы бы не смогли определить, что этот код надо включать в список.

Либо, если у Вас не на английском, какое-нибудь другое слово.
Не у нас, а у заказчика, но, в общем, список языков невелик (русский, английский и может быть литовский). То есть можно конечно и так, хоть это и порнография.

Поставить метки перед той строкой, где случается ошибка, и после. И проверять не Err, а Erl. Если ошибка происходит именно в этой строке, то это либо блокировка, либо вообще база накрылась.
Этого я совсем не понял. Метки это что? Точки останова?
Что такое Erl? (я пишу не на бейсике)
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178567
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> У меня нет списка текстов к кодам

Его можно получить элементарно: Error(n) возвращает текст, соответствующий ошибке номер n.

> хоть это и порнография.

Я с этим согласен! :^)

> Этого я совсем не понял. Метки это что? Точки останова?

Ну, лейблы, если не по-русски. Те, на которые еще GoTo делают.

> Что такое Erl?

При произошедшей ошибке Erl (сокращение от error line) возвращает номер последней метки перед строкой, где произошла ошибка, точно как Err возвращает код этой ошибки.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
On Error GoTo errSub

...

 101 
        rs.Update
 102 

...

errSub:
        If Erl =  101  Then ...
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178612
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Error(n) возвращает текст, соответствующий ошибке номер n.
Видимо, у нас с вами разные номера ошибок. Мои все с отрицательными номерами, а для Error n от 0 до 2^16.


On Error GoTo errSub
...
101
rs.Update
102
...
errSub:
If Erl = 101 Then ...


У меня это выглядит несколько иначе, хотя смысл вроде бы тот же:
try
{
rs.Update();
}
catch(CDBException e)
{
e.ReportError();
}

e -- аналог Err.

Только почему это либо блокировка, либо вообще база накрылась ?
Может, поля в таблице не хватает, или rs оказался read-only, или повторяющиеся значения уникального индекса, да мало ли причин.

Проблема при поиске кодов блокировок, что при программировании они происходят редко, и при тестировании с одного рабочего места тоже :)
А потом происходяи у заказчика...
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178617
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой Вей тебе что, лениво точку останова поставить и, пока оно там висит, из другой сессии блокировку сделать?
Встречается блин редко.. Так сделай чтобы на этапе тестирования встречалось часто. Проблем то.
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178650
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лох Пазорный
Сам ты, блин, встречаешься редко. Есть, к сожалению, ещё какие-то события блокировки, кроме легко повторимых (экспериментальный факт).

Кроме того, в ODBC блокировка всегда оптимистическая, поэтому из другой копии той же программы заблокировать нельзя (нет такой строчки, вплоть до текстов ODBC драйвера, которых у меня нет, которая говорит "вот сейчас я блокирую, а следующая разблокирует").
А если блокировать из Access через Jet, то это могут быть и не те коды...

Несколько наиболее значимых кодов мы примерно так и выловили, но недавно в одном городе стал появляться ещё один, поэтому я и решил спросить, может кто знает ВСЕ.
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178668
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если ошибки с отрицательными номерами, то сдается мне, что это коды не Аксесса, а той базы, где сидит таблица. Возможно, что они есть в хелпе той базы.
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178673
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть, к сожалению, ещё какие-то события блокировки, кроме легко повторимых (экспериментальный факт).
Пример сложно повторимых событий блокировки можно?

поэтому из другой копии той же программы заблокировать нельзя
Тебе не все равно - из той же, не из той же. Главное - где и что блокировать, и не из какой копии.
Оптимистическая блокировка от пессимистической отличается только временем установки - перед сохранением или перед изменением записи. (с одбц работал мало, если вдруг в одбц соединениях не так - не пинайте сильно ногами).
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178729
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Саныч
Это безусловно Аксесс (или его драйвер). Насчёт отрицательных кодов я погорячился, их ведь тоже приходится вытаскивать из строки, может это просто дефис, хотя обычно его там нет.

2 Лох Позорный
Не знаю, сложное ли это событие, но у нас не повторяется:
"База данных была приведена пользователем 'admin' на компьютере <> в состояние, препятствующее её открытию или блокировке."
SQLSTATE S1000, native -3810 (может и +3810).

Владимир Саныч, это блокировка? :)

Оптимистическая блокировка от пессимистической отличается только временем установки - перед сохранением или перед изменением записи.
Ну вот, где это "перед"? Остановился я на Update(), в этот момент ещё не заблокировал. Внутрь идти? В конце концов упираемся, например, в SQLSetPos(). До него ещё блокировки нет, внутрь войти нельзя.


В общем, всем спасибо...
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178772
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Насчёт отрицательных кодов я погорячился, их ведь тоже приходится вытаскивать из строки, может это просто дефис, хотя обычно его там нет.

Нет, это таки минус. Но раз их все равно приходится вытаскивать из строки, то мой вариант с отыскиванием строк не так далек от того, что делается сейчас.

> Владимир Саныч, это блокировка? :)

Несомненно. Что-то, ИМХО, Лох в этом топике не прав.
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178792
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но раз их все равно приходится вытаскивать из строки, то мой вариант с отыскиванием строк не так далек от того, что делается сейчас.
Да, до меня это как раз дошло. Правда, числа большей частью от языка не зависят.
Ну хорошо, а что делать в SQL Server'e, например? То же самое (по слову locked)? А в Oracl'e (всё-таки не Microsoft)?
ODBC, блин... универсальный доступ к данным, блин. Впрочем, не первый раз...

Вот, нашёл ссылку:
The native Microsoft Jet error codes can be an important indicator of the nature of a problem. This is especially true when SQLSTATE S1000 (General error) is returned, because the ODBC error text for this SQLSTATE value does not convey any information about the problem. An application must rely on the Microsoft Jet error code in this case, and possibly the error message . Some Microsoft Jet error codes are returned for more than one type of error, in which case the error message must be used to determine the error that occurred.

Адрес в MSDN (статья "Error Handling"):
mk:@MSITStore:C:\Program%20Files\Microsoft%20Visual%20Studio\MSDN\2001JAN\1033\dnjet.chm::/c12_body_24.htm
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32178835
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> ODBC, блин... универсальный доступ к данным, блин.

Так и я говорю...

> An application must rely on the Microsoft Jet error code in this case, and possibly the error message.

Тьфу, блин!!!
...
Рейтинг: 0 / 0
Коды блокировок (native)
    #32179953
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте
Код: plaintext
AccessError(lngCode)


для больших кодов результат разительно отличается от Error(lngCode).
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Коды блокировок (native)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]