Как использовать параметр в запросе внешних данных Excel?
-
03-07-2019 - |
Вопрос
Я уже могу использовать Excel (2007) для импорта данных из SQL Server 2005. Я добавляю подключение к данным и ввожу пользовательский запрос SQL, который извлекает мои нужные данные. Круто.
Но я хотел бы добавить возможность параметризации этого запроса на основе значения, найденного в известной ячейке в электронной таблице.
Мой запрос будет отправлен из
SELECT * FROM dbo.MyDataTable WHERE Col1 = 'apples'
что-то вроде
SELECT * FROM dbo.MyDataTable WHERE Col1 = 'Cell("B2")'
Возможно ли это? Если да, то как?
Решение
Если вы используете MS Query чтобы загрузить данные в Excel, эта страница показывает как использовать значение из ячейки на листе в качестве параметра в вашем запросе.
Другие советы
Попробуйте структурировать свой код следующим образом:
Dim strSQL as String
Dim strFruit As String
strFruit = CStr(ThisWorkbook.Sheets("Sheet1").Range("A1").FormulaR1C1)
strSQL = "SELECT * FROM dbo.MyDataTable WHERE Col1 = '" & strFruit & "'"
Я считаю полезным сначала загрузить параметр в переменную, прежде чем объединить его с запросом SQL.
Это делает вашу строку SQL более читаемой и позволяет проверять / очищать параметр перед его использованием.
Я не использовал Excel 2007, но в предыдущих версиях Excel я действительно ненавижу интеграцию SQL-запросов. В частности, мне было трудно делать именно то, о чем вы говорите, не прибегая к хакерской связке кода VBA. Я провел небольшое исследование и, наконец, решил использовать запрос Excel от Роба Ван Гелдера:
http://vangelder.orconhosting.net.nz/excel/queryeditor.html р>
Раздел «параметры» в его графическом интерфейсе позволяет вам установить параметр и заставить утилиту либо запросить у пользователя значение, либо извлечь значение из ссылки на ячейку. Я считаю, что последнее именно то, что вы хотите сделать. Он также имеет возможность автоматического обновления при изменении значения ячейки. Я часто использую функцию автоматического обновления при проверке данных в моей БД.
У меня была пара ситуаций, когда мои запросы были повреждены, и я больше не мог их открывать или видеть текст. В результате я рекомендую сохранить вкладку в таблице Excel для ваших запросов и скопировать текст запросов в ячейки на этой специальной странице. Таким образом, если инструмент запросов съест ваши запросы, вам не придется перестраивать их с нуля. Р>
Сторонний инструмент, хотя и бесплатный, может быть не тем, что вы ищете, но он хорошо работает для меня. Удачи! Р>
Dim SQLString as String
SQLString = "SELECT * FROM dbo.MyDataTable WHERE Col1 = '" & Cells("B2") & "'"
Стоит посмотреть на атаки SQL-инъекций , чтобы увидеть недостатки этого подхода, но это не обязательно должно быть соображением о том, что вам нужно сделать