MS Access подключение к SQL Server (2016) внезапно завершается неудачей - PullRequest
0 голосов
/ 07 декабря 2018

Я совсем растерялся, поэтому обращаюсь к вам в поисках помощи.

Я работаю над внешним интерфейсом базы данных MS Access 2016.Этот FE использует MS SQL Server (2016) бэкэнд, используя ODBC для подключения к таблицам.

Ситуация следующая:

Я открываю форму "myform_A", которая показывает данные из таблицы.

Я нажимаю кнопку, которая запускает некоторый процесс вфон.Этот процесс также нуждается в некоторых данных из (2-й) таблицы: tblMitarbeiter.Эта таблица, если НЕ источник формы.

Внезапно - но, к сожалению, в 95% всех случаев Access сообщает мне, что произошла ошибка 3146 (тайм-аут ODBC).

Также все таблицытот, из которого мне нужны некоторые данные в процессе (2-я таблица), доступен с помощью панели навигации Access.ODBC к этим таблицам работает.... но соединение с использованием VBA НЕ работает (но выдает ошибку 3146).

Проблема возникает на разных машинах, по локальной сети и по VPN, и сбой на линии:

Set rstMitarbeiter = dbsMitarbeiter.OpenRecordset(strSQL, dbOpenSnapshot)

ID_Mitarbeiter доступен во время выполнения.

ODBC Строка подключения:

ODBC;DRIVER={ODBC Driver 13 for SQL Server};SERVER=192.168.100.19;DATABASE=MYDBNAME;Max Pool Size=100;UID=myusername;PWD=secretPW

Обратите внимание:

  • Я пытаюсь получить только1 запись!
  • код РАБОТАЕТ , когда я помещаю ее в общедоступную подпрограмму и запускаю ее, используя прямое окно в VBA, не открывая форму "myform_A", но непосредственно после открытияДоступ к файлу.
  • Нет разницы, если я удаляю MAX POOL SIZE из строки подключения (я действительно добавил, что, чтобы избежать этой ошибки - без результата)

У меня есть

  • попытался пройти запрос - не повезло, тот же плохой результат
  • проверен на автоматическое закрытие на SQL Server для этой базы данных.Он выключен.
  • пытался подключить собственный сервер SQL к серверу - без разницы
  • установить Querytimeout - без разницы
  • установлен максимальный размер пула на SQL-сервередо 32767

Итак - что я могу сделать?

Где может скрываться ошибка?

Есть какие-нибудь идеи / предложения?

Большое вам спасибо.

Код, который я запускаю на второмтаблица (в процессе после нажатия кнопки) составляет

Dim dbsMitarbeiter As DAO.Database
Dim rstMitarbeiter As DAO.Recordset

Dim strSQL As String
strSQL = "SELECT TOP 1 * FROM tblMitarbeiter WHERE ID_Mitarbeiter=" & ID_Antragsteller & ";"

Set dbsMitarbeiter = CurrentDb()

dbsMitarbeiter.QueryTimeout = 60
Set rstMitarbeiter = dbsMitarbeiter.OpenRecordset(strSQL, dbOpenSnapshot)      

Do While Not rstMitarbeiter.EOF
    somevar = Nz(rstMitarbeiter.Fields("myfield"), 0)
    someothervar = Nz(rstMitarbeiter.Fields("someotherfield"), 0)
    rstMitarbeiter.MoveNext
Loop

rstMitarbeiter.Close
If Not rstMitarbeiter Is Nothing Then Set rstMitarbeiter = Nothing
dbsMitarbeiter.Close
If Not dbsMitarbeiter Is Nothing Then Set dbsMitarbeiter = Nothing
...