как я могу контролировать порядок, в котором выполняются подключения к данным Excel?

#sql #excel #data-connections

#sql #excel #данные-подключения

Вопрос:

Я настраиваю автоматизированное задание, которое перебирает стек данных SQL каждый раз, когда обновляются подключения к данным листа Excel, и сохраняет лист под динамически заданным именем. У меня есть 3 подключения к данным, которые все указывают на хранимые процедуры SQL. Технически говоря, все работает нормально, но теперь я понял, что порядок 3 выполняемых подключений к данным меняется непредсказуемо. Это приводит к тому, что данные не синхронизируются. Параметр цикла задается первым сохраненным procudere, поэтому он должен быть выполнен первым. Как я могу точно контролировать, в каком порядке выполняются эти подключения.

Я зарегистрировал порядок идентификаторов соединений во время вызова хранимой процедуры: (3,2,1), (3,1,2), (1,3,2) — следующие 4 цикла не изменились

Я большой ненавистник Excel, и каждый раз, когда мне нужно работать с ним, это доводит меня до грани самоконтроля. Как может быть, что эти порядки меняются? Как это контролировать.

Мартин

Комментарии:

1. Пожалуйста, покажите нам, как вы вызываете процедуры. Я предполагаю, что они вызываются с For ... Each помощью цикла, который не указывает последовательность, и вам следует попробовать вызвать их по их индексным номерам. С другой стороны, если вы вызываете их по номеру индекса, они сохраняются For ... Each методом, и они должны быть идентифицированы по имени.

2. Я не достиг этой точки программирования макроса. Я все еще вручную обновляю подключение к данным с помощью кнопки: Обновить все подключения

3. #Вариант Ok. Размышления о вашем ответе дают мне понять, что я могу вызывать соединение отдельно. Я очень простой пользователь Excel, и я всегда использовал команду UpdateAll в предыдущей версии этого файла Excel. Это звучит как возможный способ. Но вы должны согласиться с тем, что нажатие кнопки UpdateAll должно выполнять подключения в одном предсказуемом (алфавитном?) Порядке

4. Нет. Во многих случаях Excel создает индексы в зависимости от последовательности создания или загрузки. Какова, например, последовательность книг в памяти?

5. @Variatus, извините, но я не понимаю вашего вопроса. У меня есть 1 соединение (1) в worksheet1 и 2 в worksheet2 (2 и 3). Оба соединения worksheet2 связаны с worksheet1. Последовательность загрузки описана выше. Я просто постоянно нажимаю кнопку UpdateAll. Какие индексы меняются? Для меня это выглядит как полностью стабильная повторяющаяся задача

Ответ №1:

Вы должны иметь возможность контролировать порядок выполнения запросов в VBA.
Сначала убедитесь, что настройки «Фонового обновления» отключены в свойствах запроса.

введите описание изображения здесь

Затем в коде, который вы запускаете с помощью кнопки, укажите каждое обновление отдельного запроса в нужной последовательности и (просто для ясности) используйте опцию «BackgroundQuery:= False», чтобы каждый запрос завершался до запуска следующего.

 Sheet1.QueryTables("QueryName1").Refresh BackgroundQuery:=False
Sheet2.QueryTables("QueryName2").Refresh BackgroundQuery:=False
Sheet2.QueryTables("QueryName3").Refresh BackgroundQuery:=False
  

Комментарии:

1. Интересный момент! Да, на самом деле можно управлять порядком в сценарии макросов. НО тот факт, что нажатие кнопки «Обновить все» приводит к выполнению соединения в последовательности заказов, которая постоянно меняется, настолько разочаровывает и вызывает ошибки, что я изменил свои запросы таким образом, чтобы порядок больше не имел значения. Мы с Excel никогда не будем друзьями. Последнее неприятное открытие, которое мне нужно будет исследовать: мой запрос работает с динамическим SQL, который возвращает заголовки столбцов на основе языка, связанного с этим набором данных, который может отличаться при каждом обновлении … и Excel не переваривает это