Как добавить параметры для запроса внешних данных в Excel, который не может быть отображен графически? - PullRequest
34 голосов
/ 22 июня 2010

Я часто использую MS Excel Get External Data для создания простых отчетов - запуска запросов к базам данных и приятного отображения в Excel.Превосходные функции Excel, такие как фильтрация и сводные таблицы, а также знакомый интерфейс для пользователей делают его вполне подходящим для этого.Однако одно ограничение в Microsoft Query заключается в том, что вы не можете добавлять параметры к запросам, которые не могут отображаться графически, что значительно ограничивает объем SQL, который вы можете написать.

Есть ли какое-либо решение для ошибки "параметры не допускаются в запросах, которые не могут быть отображены графически"?

Ответы [ 4 ]

48 голосов
/ 21 августа 2012

Интерфейс Excel для запросов SQL Server не позволит вам иметь пользовательские параметры.Обойти это можно путем создания общего запроса Microsoft, затем добавить параметры, а затем вставить свой параметризованный запрос в свойствах соединения.Вот подробные шаги для Excel 2010:

  1. Открыть Excel
  2. Перейти Данные вкладка
  3. Из Из других источников Кнопка выбора Из Microsoft Query
  4. Появится окно «Выбор источника данных». Выберите источник данных и нажмите ОК .
  5. Мастер запросов
  6. Выберите столбец: появится окно.Цель состоит в том, чтобы создать общий запрос.Я рекомендую выбрать один столбец из небольшой таблицы.
  7. Фильтр данных: просто нажмите Далее
  8. Порядок сортировки: просто нажмите Далее
  9. Готово: просто нажмите Готово .
Появится окно «Импорт данных»:
  1. Нажмите Свойства ...Кнопка .
  2. Выберите вкладку Определение
  3. В разделе «Текст команды:» добавьте предложение WHERE , которое включаетПараметры Excel.Важно добавить все параметры, которые вы хотите сейчас.Например, если я хочу два параметра, я мог бы добавить это: ГДЕ 1 =?и 2 =?
  4. Нажмите OK , чтобы вернуться в окно «Импорт данных»
Выберите Отчет сводной таблицы Нажмите OK Вам будет предложено ввести значение параметра для каждого параметра. После ввода параметров вы будетена вашей сводной таблице Перейдите на вкладку Данные и нажмите кнопку подключения Свойства
  1. Нажмите определение tab
  2. В разделе «Текст команды:» Вставить нужный запрос SQL с тем же количеством параметров, которое вы определили ранее.
  3. Нажмите кнопку Параметры ...
  4. введите значения подсказок для каждого параметра
  5. Нажмите OK
Нажмите OK , чтобы закрыть окно свойств Поздравляем, теперь у вас есть параметры.
24 голосов
/ 04 июля 2012

Простой обходной путь (VBA не требуется)

  1. Щелкните правой кнопкой мыши таблицу, разверните контекстное меню «Таблица», выберите «Свойства внешних данных»
  2. Нажмите кнопку «Свойства соединения» (с меткойтолько во всплывающей подсказке)
  3. Перейти к вкладке «Определение»

Отсюда редактируйте SQL напрямую, добавив «?»везде, где вы хотите параметр.Работает так же, как и раньше, за исключением того, что вы не ворчите.

5 голосов
/ 22 июня 2010

Если у вас есть Excel 2007, вы можете написать VBA для изменения соединений (т.е. запросов внешних данных) в рабочей книге и обновить свойство CommandText.Если вы просто добавите ? там, где вы хотите параметр, то в следующий раз, когда вы обновите данные, он запросит значения для соединений!магия.Когда вы посмотрите на свойства соединения, кнопка «Параметры» теперь будет активной и пригодной для использования в обычном режиме.

Например, я бы написал макрос, прошел через него в отладчике и заставил бы его соответствующим образом установить CommandText.Сделав это, вы можете удалить макрос - это всего лишь средство для обновления запроса.

Sub UpdateQuery
    Dim cn As WorkbookConnection
    Dim odbcCn As ODBCConnection, oledbCn As OLEDBConnection
    For Each cn In ThisWorkbook.Connections
        If cn.Type = xlConnectionTypeODBC Then
            Set odbcCn = cn.ODBCConnection

            ' If you do have multiple connections you would want to modify  
            ' the line below each time you run through the loop.
            odbcCn.CommandText = "select blah from someTable where blah like ?"

        ElseIf cn.Type = xlConnectionTypeOLEDB Then
            Set oledbCn = cn.OLEDBConnection
            oledbCn.CommandText = "select blah from someTable where blah like ?" 
        End If
    Next
End Sub
0 голосов
/ 26 июля 2011

ДА - решение состоит в том, чтобы сохранить рабочую книгу в файл XML (например, «XML Spreadsheet 2003») и отредактировать этот файл как текст в блокноте!используйте функцию «ПОИСК» в блокноте, чтобы найти текст запроса и изменить ваши данные на «?».

сохранить и открыть в Excel, попробуйте обновить данные и Excel будет отслеживать параметры.

...