Страницы: 1
RSS
VBA обновление подключений по очереди.
 
Привет
Стоит задача по очереди обновить ряд Power Query подключений. По очереди, это значит дождаться конца предыдущего обновления и только потом начинать следующий. На форуме нашел, что стоит запускать с BackgroundQuery = false. Но это не помогает и они параллельно выполняются. Подскажите пожалуйста, как решить эту задачу. Спасибо
Код
    ThisWorkbook.Connections("Query - makeLinkWeb").OLEDBConnection.BackgroundQuery = False
    ThisWorkbook.Connections("Query - makeLinkWeb").refresh
    ThisWorkbook.Connections("Query - makeLinInsta").OLEDBConnection.BackgroundQuery = False
    ThisWorkbook.Connections("Query - makeLinInsta").refresh
 
Доброе время суток
Попробуйте
Код
ThisWorkbook.Connections("Query - makeLinkWeb").OLEDBConnection.Refresh
Вдруг, да поможет. А то вы отключаете фоновое обновление у одного объекта, а метод обновления запускаете для более высокоуровневого. Проверить не могу. Дома нет таких наборов данных, чтобы оценить.
 
Андрей VG, Спасибо за помощь! Попробовал - стартует один коннект, потом к нему через какое-то время второй добавляется. А хочется, чтобы они шли поочередно.
У меня почему-то проблемы при одновременном Refresh несколько коннектов, если они берут данные(два коннекта) информацию из одного файла загруженного в модель и прогоненого через Table.Buffer. Тут обсуждали.
Код
  ThisWorkbook.Connections("Query - skladNumArticle").OLEDBConnection.BackgroundQuery = False
     ThisWorkbook.Connections("Query - skladNumArticle").OLEDBConnection.refresh
     ThisWorkbook.Connections("Query - skladNumSizeAll").OLEDBConnection.BackgroundQuery = False
     ThisWorkbook.Connections("Query - skladNumSizeAll").OLEDBConnection.refresh

 
Цитата
Vsevolod написал:
стартует один коннект, потом к нему через какое-то время второй добавляется
Тогда костыль, навроде
Код
Public Sub refreshOleConnection(ByVal thisConnection As OLEDBConnection)
    thisConnection.Refresh
    Do While thisConnection.Refreshing
        DoEvents
    Loop
End Sub
 
Андрей VG, по исследую еще и отпишусь. Мне кажется кружок крутиться - НО Excel понимает, что все данные он уже собрал и рендерит(мои догадки) и стартует следующее обновление. Так как в других моделях когда много коннектов больше задержки. Отпишусь по результату! Благодарю за помощь!  
 
Vsevolod, вы можете все таки объяснить зачем вы выдергиваете данные в таблицу на лист, а затем обращаетесь другими запросами к этой таблице, вместо того чтобы закинуть результат первого запроса в буфер и другими запросами обращаться к уже готовой таблице в памяти?
Зачем все эти костыли?
Изменено: PooHkrd - 16.07.2018 09:34:57
Вот горшок пустой, он предмет простой...
 
Цитата
Андрей VG написал:
Тогда костыль, навроде
Есть ощущение, что цепочка запросов в PQ всегда пересчитывается при изменении первого, причем очередность он "знает сам". Первым может быть и 7-й в списке из 10-ти. Тогда 7, 8, 9 и 10-й пересчитаются автоматически. И это никак не изменить, даже в 2016-м.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Андрей VG, спасибо большое! Не могу сообразить, как переменную, что туда передать?
Код
refreshOleConnection (ThisWorkbook.Connections("Query - dataBlogerProduct"))
refreshOleConnection (ThisWorkbook.Connections("Query - dataBlogerProduct").OLEDBConnection)
Пробовал такие два варианта:(
PooHkrd, вот TheBestOfTheBest,  описал то что у меня происходит. Большой Excel фаил, есть много различных вычислений, которые сходятся к одним и тем же источникам данных(запиханых в буфер). Если Вызвать рефреш одновременный двух connection - то он будет таблицу(источник данных) все равно дважды обновлять:(  
 
Т.е. у вас на выходе несколько одновременно выполняемых запросов, каждый из которых выводит данные в какие-то таблицы? Если так, то да, создаются параллельные цепочки, которые выполняются одновременно.
Тут для оптимизации уже нужно смотреть на весь ваш проект целиком. А это вряд ли возможно в рамках одной темы.
Единственно, что по собственному опыту, я бы рекомендовал посмотреть в сторону Power Pivot, если загружать таблицы в модель данных, то там как раз более менее нормально строятся цепочки загрузки таблиц, даже использующих одни и те же источники.
Вот горшок пустой, он предмет простой...
 
Андрей VG, смог сделать по примеру, как показал Андрей.
PooHkrd, в одном файле генерируется несколько проекций данных, в которых данные могут браться из одного и того же источника. Например Имя клиента. Где возможно, использую Power Pivot.
Страницы: 1
Наверх