Я совсем растерялся, поэтому обращаюсь к вам в поисках помощи.
Я работаю над внешним интерфейсом базы данных 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