Ошибка Excel VBA ODBC на SQL Server

#sql #sql-server #vba #excel

#sql #sql-сервер #vba #excel

Вопрос:

Мне нужны некоторые предложения по Excel и VBA. Моя система:

  • MS SQL Server 2008R2
  • Ms Excel 2003
  • ODBC установлен и работает

У меня есть код vba для извлечения данных с SQL Server. Код:

 Sub update_supplier()

'CONNECTION STRING
cnnstr = "ODBC;DSN=XXX-XXXX-XX;UID=sa;PWD=xxxxx;Database=XXXXXXXXX"

'Query
qry_sup = "Select a.name from table a where a.postdate between '2013-01-01' and '2013-12-31'"

'UPDATE SHEET
Set sql_qry_sup = ActiveSheet.QueryTables.Add(Connection:=cnnstr, Destination:=Range(Cells(1, 1), Cells(1, 1)), Sql:=qry_sup)
    sql_qry_sup.FillAdjacentFormulas = True
    sql_qry_sup.BackgroundQuery = False
    sql_qry_sup.Refresh
 End Sub
 

Хорошо.. когда я запускаю этот макрос, я получаю ОБЩУЮ ОШИБКУ ODBC (ошибка времени выполнения 1004), и я уверен, что это связано с параметром BETWEEN в запросе..

Фактически.. Если ‘ изменить мой запрос на

 qry_sup = "Select a.name from table a where a.postdate > '2013-01-01'"
 

vba работает нормально..

Я также попробую следующее

 qry_sup = "Select a.name from table a where (a.postdate >= '2013-01-01' and a.postdate <= '2013-12-31')"
 

но я получаю ту же общую ошибку ODBC (ошибка времени выполнения 1004)

Есть какие-либо предложения или информация об этой проблеме??

Комментарии:

1. Работает ли ваш запрос в SQL Server (без использования Excel)? Тогда это ваш запрос, например, форматирование дат (вы указываете даты в виде строки).

2. Это могут быть ваши региональные настройки, 2013-01-01 — это 2013-01-01 как в формате ГГГГ-ММ-ДД, так и в формате ГГГГ-ДД-ММ, но 2013-12-31 — неверная дата в формате ГГГГ-ДД-ММ. Попробуйте изменить его на YEAR (a.postdate) = 2013?

3. @MP24 => Запрос отлично работает на моем SQL Server

4. Являются ли ваши значения диапазона дат статическими или создаются динамически из кода?

5. @RichardHansell Дата в формате верна. Сервер sql (лучше.. эта база данных на моем sql server ..) хочет дату в ‘ГГГГ-ММ-ДД’. Мой запрос находится между первым января (2013-01-01) и 31 декабря (2013-12-31). ГОД (2013) может быть решением… Но цель состоит в том, чтобы создать лист Excel, в котором пользователь может установить диапазон дат, возможно, отличный от «между 2013-01-01 и 2013-12-31» и, возможно, через два года (например, с 2013-10-01 по 2014-06-01)…