Я получил MS MDB-файл доступа, который содержит несколько таблиц.1 - это локальная таблица в mdb, и еще 2 таблицы, которые связаны с odbc на удаленном сервере ms sql 2005. Я создал форму и код vba для выполнения запроса к таблицам.Но я получаю ошибку.2 таблицы на самом деле являются представлениями.
Вот часть моего кода:
thisMonthTable = "dbo_inbound_rated_all_" & currentYear & currentMonth
If (currentMonth = "12") Then
nextMonthTable = "dbo_inbound_rated_all_" & nextYear & nextMonth
Else
nextMonthTable = "dbo_inbound_rated_all_" & currentYear & nextMonth
End If
With cmdCommand
.ActiveConnection = conConnection
.CommandText = "SELECT A.* FROM " & nextMonthTable & " A Inner Join opt_in_customer_record B on A.imsi_number = B.imsi where Datevalue(A.call_date) >= Datevalue(B.start_date) and Datevalue(A.call_date) <= (Datevalue(B.start_date) + val(LEFT(B.event_plan_code, 1))) "
.CommandType = adCmdText
End With
With rstRecordSet
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open cmdCommand
End With
Для вашей информации, значение thisMonthTable / nextMonthTable и запроса:
- thisMonthTable: dbo_inbound_rated_all_201012
- nextMonthTable: dbo_inbound_rated_all_201101
SQL:
SELECT A.*
FROM ( dbo_inbound_rated_all_201012
OR dbo_inbound_rated_all_201101 ) A
INNER JOIN opt_in_customer_record B
ON A.imsi_number = B.imsi
WHERE Datevalue(A.call_date) >= Datevalue(B.start_date)
AND Datevalue(A.call_date) <= (Datevalue(B.start_date) + val(LEFT(B.event_plan_code, 1)))
Когда я запрашиваю в vba запрос на thisMonthTable2, d________хорошо.Но когда я выполняю запрос в vba с помощью nextMonthTable (dbo_inbound_rated_all_201101), я получаю ошибку:
Ошибка времени выполнения "-2147217900 (80040e14)" Синтаксическая ошибка в предложении from.
Но когда я запускаю эти запросы в ms доступе, оба они работают нормально.
Запросы абсолютно одинаковы, за исключением того, что имя таблицы отличается.Я уверен, что 2 представления существуют как в моем файле mdb в виде связанной таблицы, так и на удаленном сервере sql.
Я посмотрел в Интернете об ошибке 80040e14, некоторые говорят, что это связано с ключевым словом, используемым в качестве переменной/ имя столбца, но на самом деле это не так.
PS Я должен еще раз заявить, что запросы отлично выполняются по запросу ms-access, в отличие от запросов, выполняемых в коде vba через ado, поэтому2 вида должны быть в порядке и правильны.