Обновление нескольких соединений ODBC через фоновый запрос - PullRequest
1 голос
/ 15 марта 2019

Я использую набор сценариев, которые извлекают много разных данных из iSeries через ODBC.

ActiveWorksheets.RefreshAll не работает, поскольку не оставляет достаточно времени для выполнения фоновых запросов

Я попробовал следующее, но безрезультатно

Dim qry As Connections
'Set qry =

For Each qry In ActiveWorksheets.Connections
    qry.BackgroundQuery = False
    qry.RefreshAll
    DoEvents
Next qry

Это дает мне ожидаемый Error 424 Ожидаемый объект.Я не собираюсь использовать Set qry = здесь, так как мне нужно запустить через 30 различных соединений

Давайте пока просто назовем их connection1, connection2 и т. Д., Поскольку их имена повсюду

Является ли самый простой способ остановить фоновый запрос, обновить, активировать фоновый запрос - до импорта данных, или есть лучший способ?

Я просмотрел все SO - но не могу найти информациюна нескольких соединениях ODBC

РЕДАКТИРОВАТЬ:

Dim qry As WorkbookConnection

For Each qry In ActiveWorkbook.Connections
    qry.Refresh
    DoEvents
Next qry

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Мне удалось решить это. Так что все, кому это может понадобиться в будущем, могут видеть:

Dim qry As WorkbookConnection

For Each qry In ActiveWorkbook.Connections
    qry.ODBCConnection.BackgroundQuery = False
    qry.Refresh
    qry.ODBCConnection.BackgroundQuery = True
Next qry

Хотя это не похоже на BackgroundQuery = True/False, похоже, здесь это не жизненно важно. Отключение означает, что когда вы qry.Refresh, он извлекает данные и обновляет его.

Также использование For Each qry означает, что вместо того, чтобы выписывать 20 раз, я могу просто просмотреть каждое соединение и отключить его, обновить и снова включить

0 голосов
/ 15 марта 2019

я верю вашему

Dim qry As Connections

следует читать

Dim qry As WorkbookConnection

Свойство ActiveWorksheets.Connections .Item возвращает объект типа WorkbookConnection . Если вы пытаетесь обновить соединения по одному, как это видно из вашего оператора For Each, этот объект представляет собой отдельное соединение с такими методами, как Refresh, а не совокупность всех соединений.

...