Запрос T-SQL с объявлениями переменных в Excel VBA Code fail

У меня возникла проблема с запуском SQL-запроса с функциями «объявить» и «установить» в VBA.

Sheets("Arkusz1").Select connstring = _ "ODBC;DRIVER=SQL Server;SERVER=my_database_server;UID=user;PWD=password;APP=Microsoft Office 2010;WSID=some_id;DATABASE=mydatabase" With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Worksheets("Arkusz1").Range("A1"), Sql:=Array( _ "declare @dzisiaj date" & Chr(13), _ "set @dzisiaj = getdate()" & Chr(13), _ "select @dzisiaj as dzisiaj")) .BackgroundQuery = False .Refresh End With 

В SQL Server 2012 этот код работает нормально, но … когда я его внедряю, он дает мне ошибку времени выполнения «1004». Также работает код VBA по другим запросам.

Мой полный SQL-запрос содержит около 90 строк с двумя объявлениями переменных (одно объявление является значением из другого 30-строчного SQL-запроса), поэтому обязательно включать объявления переменных 🙂

Как решить эту проблему?

Я по-прежнему новичок в vb и vba и изучаю себя, но я знаю, что вы можете объявлять и записывать переменные в VB.net, которые затем могут загружаться во встроенный SQL-скрипт. Я думаю, вы можете сделать то же самое в vba. Вот что я предлагаю.

  1. Объявите строку vb как SQL_Var_1
  2. Вставьте 30-строчный SQL-запрос в виде отдельного запроса перед основным запросом.
  3. Запишите результат 30-строчного запроса в строку vb SQL_Var_1.
  4. Удалите объявления из основного SQL-запроса, но оставив ссылки на эти переменные.
  5. Ссылка SQL_Var_1 как входной параметр во встроенном основном запросе с использованием того же самого имени, которое вы использовали в основном запросе (например, @dzisiaj), как здесь .

Если вы выполните следующие шаги для обеих переменных SQL, вы сможете добиться того же результата, как если бы вы использовали объявленные переменные SQL.

Я понял. Ключ заключается в использовании ADODB-соединения для импорта данных через SQL Query. Также необходимо проверить библиотеку Microsoft Active X Data Objects 2.0 в Tools-> References в редакторе Visual Basic (ярлык: Alt + F11 в Excel).

Итак, есть пример моего кода VBA:

  Sub sql_query_import() ' Declarations Dim Cn As ADODB.Connection Dim Server_Name As String Dim Database_Name As String Dim User_ID As String Dim Password As String Dim SQLStr As String Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset ' Server connection settings Server_Name = "192.168.1.106\my_database" ' IP of server name Database_Name = "mydatabase" ' Database name User_ID = "myusername" ' User name Password = "mypassword" ' User password ' SQL Query SQLStr = "SET NOCOUNT ON " & Chr(13) ' it's mandatory if you don't want to get error 3704 SQLStr = SQLStr & "declare @dzisiaj date " & Chr(13) SQLStr = SQLStr & "set @dzisiaj = getdate() " & Chr(13) SQLStr = SQLStr & "select @dzisiaj as 'today' ' Connect to database Set Cn = New ADODB.Connection Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _ ";Uid=" & User_ID & ";Pwd=" & Password & ";" ' Start connection rs.Open SQLStr, Cn, adOpenStatic ' Load data With rs For i = 1 To .Fields.Count Worksheets(1).Cells(1, i) = .Fields(i - 1).Name ' Include column name if not - delete it Next i End With Worksheets(1).Cells(2, 1).CopyFromRecordset rs ' Start loading data to Cell A2 rs.Close Set rs = Nothing Cn.Close Set Cn = Nothing End Sub 

Использование в SQL Query «SET NOCOUNT ON» необходимо, если вы не хотите получать ошибку 3704. Кроме того, использование

 SQLStr = "SET NOCOUNT ON " & Chr(13) ' it's mandatory if you don't want to get error 3704 SQLStr = SQLStr & "declare @dzisiaj date " & Chr(13) 

более эффективный способ включения многострочных SQL-запросов 🙂

  • Преобразование даты в номер при импорте из Excel в SQL Server
  • Точность с плавающей запятой SQL ограничена 6 цифрами
  • Показывать пользовательские автоматические заголовки в excel для созданного файла sql xml
  • Чтение из Excel в SQL - неправильный тип столбца
  • Нечетность функции AVG SQL Server
  • Присоединиться к таблицам с одной общей колонкой на пару
  • Экспортировать результаты нескольких разнородных запросов в Excel?
  • Как создать динамический запрос .mdsqx для дополнительных приложений Excel Excel?
  • T-SQL: экспорт в новый файл Excel
  • Среднее значение SQL для строк и столбца одновременно - среднее значение матрицы
  • Попытка запуска SQL-хранимой процедуры в EXCEL автоматически
  • Interesting Posts

    Печать нескольких текстовых строк из одной ячейки

    Застрял в формуле excel, вызывая данные из другого листа без изменения ссылки на ячейку

    использованные часы для всех использованных часов или нет

    Использование COM-класса в PHP

    Чтение данных из xlsx в рамку данных Pandas

    передача массива в качестве параметра скрипта RunPython в VBA (xlwings)

    Цвет ячейки HSSFWorkbook не отображается после нескольких итераций

    Взаимодействие с кнопками / макросами внутри excel автоматически

    Почему я не могу редактировать элемент управления командной строки в Excel 2013 с помощью VBA?

    Excel VSTO + C # .NET + Создать сводную таблицу

    Excel VBA Function Lookover – Cooccurrences из двух значений

    Как добавить значки в пользовательское меню в excel-vba

    Сохраненная переменная из веб-службы в VBA для Excel 2013

    Ошибка несоответствия типа при запуске кода VBA для удаления строк на основе определенных критериев

    Объединение с выбранным регистром

    Давайте будем гением компьютера.