#ms-access #vba
#ms-access #vba
Вопрос:
Добрый день всем,
У меня простая проблема, которая ставит меня в тупик. Я пытаюсь изменить строки подключения для своих сквозных запросов. Моя проблема в том, что, похоже, это работает. Строки подключения обновляются до новой строки подключения, однако, когда я ее запускаю, она явно использует предыдущую строку подключения.
Код:
Sub UpdatePassthroughConnecStrings()
Dim qdf As QueryDef
For Each qdf In CurrentDb.QueryDefs
If qdf.Type = dbQSQLPassThrough Then
qdf.Connect = ConnectString
End If
Next qdf
End Sub
Function ConnectString() As String
Dim strYear As String
strYear = "LIMS" amp; Form_frm_Main.Year
ConnectString = "ODBC;DSN=LIMS;UID=" amp; strYear amp; ";PWD=1234;"
End Function
В принципе, я обновил часть UID, чтобы я мог подключиться к правильному табличному пространству Oracle db (оно разделено по годам). Когда я проверяю строки подключения после обновления, они правильно обновлены, но просто неправильно подключаются. Интересно, что этот код отлично работает в Excel. Будем признательны за любую помощь!
Комментарии:
1. Похоже, что соединение используется повторно / не разорвано полностью / корректно. Возможно, проблема с поведением пула соединений?
2. Это довольно хорошее предположение, хотя я не уверен, как бы я очистил пул из Access
3. Ну, на первый взгляд, это кажется чем-то вроде путаницы, но если вы меняете строку подключения, вы могли бы явно закрыть querydef непосредственно перед обновлением строки подключения … чисто для отвода глаз.
4. То, что у вас есть, выглядит просто отлично. Я бы добавил, что после изменения параметров запроса попробуйте Currentdb.QueryDefs.Refresh. Приведенные здесь комментарии о том, что предыдущее соединение остается активным, верны, но до тех пор, пока новое соединение является действительным и они могут подключаться к активному серверу, новые соединения должны работать. попробуйте выполнить приведенную выше команду обновления.
5. Спасибо за предложение, я добавил вышеупомянутый Currentdb.QueryDefs.Refresh в свой код, но проблема все еще сохраняется. Строка подключения явно обновлена, но все еще подключается к исходной строке подключения.