Обновление строки подключения к сквозному запросу Access VBA не работает

#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 в свой код, но проблема все еще сохраняется. Строка подключения явно обновлена, но все еще подключается к исходной строке подключения.