MS Access и ODBC связаны таблицы и VBA - PullRequest
1 голос
/ 23 марта 2011

Я получил 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 вида должны быть в порядке и правильны.

Ответы [ 3 ]

1 голос
/ 23 марта 2011

Если conConnection является соединением ADO с SQL Server, SQL-код, который вы подаете, может , а не использовать функции Access / VBA, которые не поддерживаются SQL Server.В SQL Server нет функции DateValue.

1 голос
/ 23 марта 2011

Это в основном дикое предположение, но у меня были странные проблемы со связанными таблицами при использовании оптимистической блокировки доступа.Попробуйте изменить .LockType на adLockReadOnly.

0 голосов
/ 23 марта 2011

Что второй А делает сразу после «&» и перед «Внутренним соединением»?

CommandText = "SELECT A.* FROM " & nextMonthTable & " A Inner Join opt_in_customer

Я не эксперт по SQL, но мне это не подходит.

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