我得到了一个包含一些表的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