Как использовать параметр в запросе внешних данных Excel? - PullRequest
3 голосов
/ 05 марта 2009

Я уже могу использовать Excel (2007) для импорта данных из SQL Server 2005. Я добавляю подключение к данным и ввожу пользовательский запрос SQL, который извлекает мои нужные данные. Круто.

Но я хотел бы добавить возможность параметризации этого запроса на основе значения, найденного в известной ячейке в электронной таблице.

Мой запрос будет идти с

SELECT * FROM dbo.MyDataTable WHERE Col1 = 'apples'

что-то вроде

SELECT * FROM dbo.MyDataTable WHERE Col1 = 'Cell("B2")'

Возможно ли это? Если да, то как?

Ответы [ 4 ]

3 голосов
/ 11 марта 2009

Если вы используете MS Query для передачи данных в Excel, на этой странице показано, как использовать значение из ячейки на листе в качестве параметра в вашем запросе.

1 голос
/ 05 марта 2009

Попробуйте структурировать свой код следующим образом:

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 более читаемой и позволяет проверять / очищать параметр перед его использованием.

1 голос
/ 05 марта 2009

Я не использовал Excel 2007, но в предыдущих версиях Excel я действительно ненавижу интеграцию SQL-запросов. В частности, мне было трудно делать именно то, о чем вы говорите, не прибегая к хакерской связке кода VBA. Я провел небольшое исследование и в конце концов решил использовать запрос Роба Ван Гелдера в Excel:

http://vangelder.orconhosting.net.nz/excel/queryeditor.html

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

У меня была пара ситуаций, когда мои запросы были повреждены, и я больше не мог их открывать или просматривать текст. В результате я рекомендую сохранить вкладку в таблице Excel для ваших запросов и скопировать текст запросов в ячейки на этой специальной странице. Таким образом, если инструмент запросов съест ваши запросы, вам не придется перестраивать их с нуля.

Сторонний инструмент, хотя и бесплатный, может быть не тем, что вы ищете, но он хорошо работает для меня. Удачи!

0 голосов
/ 05 марта 2009
Dim SQLString as String

SQLString = "SELECT * FROM dbo.MyDataTable WHERE Col1 = '" & Cells("B2") & "'"

Стоило бы взглянуть на Атаки SQL-инъекций , чтобы увидеть недостатки этого подхода, но это может не обязательно учитывать то, что вам нужно сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...