Как вернуть несколько операторов SELECT из VBA Excel - PullRequest
0 голосов
/ 20 марта 2019

У меня есть настройка процедуры VBA в Excel, чтобы взять некоторый текст, вставленный на вкладку Excel, и отправить его в виде текста команды для выполнения запроса SQL.

Однако в моем запросе у меня есть 3 разные таблицы, которые я хочу вернуть отдельно (отсюда 3 разных соединения в моем коде VBA).

Есть ли способ использовать мой запрос для возврата трех разных таблиц, чтобы мне не приходилось запускать запрос 3 раза, чтобы просто получить другой оператор выбора в конце?

Код конца запроса:

SELECT * FROM #MailMergeFormatStep1
SELECT * FROM #MailMergeFormatStep2
SELECT * FROM #MailMergeFormatStep3

Я хочу, чтобы результаты каждого из этих операторов выбора были запущены и возвращены в отдельное табличное соединение в Excel.

Код:

Sub UploadCheckerQuery()

ActiveWorkbook.Connections("UploadCheckerConnection1").ODBCConnection.CommandText = Sheets("SQL1").Range("A5:A400").Value
ActiveWorkbook.Connections("UploadCheckerConnection1").Refresh

ActiveWorkbook.Connections("UploadCheckerConnection2").ODBCConnection.CommandText = Sheets("SQL2").Range("A5:A400").Value
ActiveWorkbook.Connections("UploadCheckerConnection2").Refresh

ActiveWorkbook.Connections("UploadCheckerConnection3").ODBCConnection.CommandText = Sheets("SQL3").Range("A5:A400").Value
ActiveWorkbook.Connections("UploadCheckerConnection3").Refresh

End Sub

1 Ответ

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

Совершенно возможно вернуть несколько наборов записей из одного запроса - для этого нужна команда ADO NextRecordset. Полная информация: здесь , но вкратце просто объедините запросы, используя: «SELECT * FROM table1; SELECT * FROM table2». Однако несколько наборов записей должны быть в одном соединении.

 Dim rs as new recordset
 set rs = connections(1).execute("Select * from table1:select * from table2)
 msgbox rs(0)
 rs.nextrecordset
 msgbox rs(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...