我得到了一個包含一些表的ms訪問mdb文件。 1是mdb中的本地表,還有2個表與遠程ms sql server 2005上的odbc鏈接。我製作了一個表單和一個vba代碼來對錶執行查詢。但我得到錯誤。這兩張表實際上是視圖。MS訪問和ODBC鏈接表和VBA
這裏是我的代碼的一部分:
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查詢與thisMonthTable(dbo_inbound_rated_all_201012),該查詢是好的。但是,當我在VBA查詢與nextMonthTable(dbo_inbound_rated_all_201101),我得到了一個錯誤:
Run-time error "-2147217900 (80040e14)" Syntax error in from clause.
但是,當我在MS Access中運行這些查詢,兩者都運行良好。
查詢完全相同,只是表名不同。我確信這兩個視圖都存在於我的mdb文件中作爲鏈接表和遠程sql服務器。
我查了一下關於錯誤80040e14的網絡,有人說它和一個用作變量/列名的關鍵字有關,但事實並非如此。
P.S.我必須再次聲明,查詢在ms-access的查詢下完美運行,與通過ado在vba代碼中進行的查詢形成對比,因此2個視圖應該沒問題且正確。
你可以發佈dbo_inbound_rated_all_201012和dbo_inbound_rated_all_201101的SQL嗎? – 2011-03-23 03:18:43
什麼sql?我發佈視圖定義並不方便。抱歉。 – lamwaiman1988 2011-03-23 03:21:03
在這種情況下,視圖定義是否完全相同(除了簡單的where子句)? – 2011-03-23 03:47:35