Как использовать параметр в запросе внешних данных Excel?

StackOverflow https://stackoverflow.com/questions/612664

  •  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-инъекций , чтобы увидеть недостатки этого подхода, но это не обязательно должно быть соображением о том, что вам нужно сделать

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top