Еще одна тема с ошибкой вызова ODBC - PullRequest
1 голос
/ 31 октября 2011

Я использую Access 2010 FE и SQL Server 2005 BE. Я могу успешно выполнить сквозные запросы к моему SQL Server, используя соединения без DSN.

На этапе тестирования мне иногда требуется восстановить базу данных, чтобы вернуться к исходным записям, чтобы я мог повторно выполнить свои запросы. Я обнаружил, что когда я запускаю сквозной запрос, он создает активное соединение на моем SQL Server. Я вижу соединение через консоль управления SQL Server в разделе УПРАВЛЕНИЕ | Журналы SQL Server | Монитор активности, выберите просмотр процессов. Там я вижу, какой идентификатор процесса используется и кто его использует, когда я выполняю свой сквозной запрос.

Теперь для меня единственный способ восстановить базу данных - это УБИТЬ ПРОЦЕСС, например. Активное соединение

Теперь, когда я восстановил свою базу данных и перезапустил сквозной запрос, я получил сообщение ODBC - Call Failed. Я попытался запустить процедуру, чтобы обновить мои querydefs, но безрезультатно, я все равно получу окно сообщения ODBC-- Call Failed при нажатии на эти объекты.

Теперь есть два варианта решения этой проблемы, которые в любом случае я считаю не удобными для пользователя.

  • Перезапустите приложение Access
  • Подождите примерно 5-10 минут, чтобы повторно запустить сквозной запрос

Я создал функцию для перехвата моих ошибок ODBC, и вот что появляется:

Номер ошибки ODBC: 0
Описание ошибки: [Microsoft] [Драйвер ODBC SQL Server] Ошибка канала связи

Номер ошибки ODBC: 3146
Описание ошибки: ODBC - сбой вызова.

Так что, если по какой-то причине мне нужно перезапустить свой SQL-сервер или завершить процесс (Active Connection) на моем SQL-сервере, в то время как приложение Access в настоящее время подключено через ODBC, объекты, созданные через ODBC, не будут работать должным образом, пока я не выполню 2 решения, как указано выше.

Может кто-нибудь пролить совет по решению? Я ценю любое понимание.

1 Ответ

0 голосов
/ 01 ноября 2011

Я задал похожий вопрос некоторое время назад, но так и не получил удовлетворительного ответа.Мой оригинальный вопрос здесь: Заставить SET IDENTITY_INSERT быстрее действовать из MS Access

Здесь задана настройка реестра , задокументированная здесь для ACE, которая управляет поведением времени ожидания:

ConnectionTimeout : количество секунд, в течение которых кэшированное соединение может оставаться бездействующим до истечения времени ожидания.По умолчанию используется значение 600 (значения имеют тип REG_DWORD).

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

См. Мой полный ответ на оригинальный вопрос для получения дополнительной информации.

...