Sql server 2005 MS access和ODBC链接表及VBA

Sql server 2005 MS access和ODBC链接表及VBA,sql-server-2005,ms-access,vba,ado,Sql Server 2005,Ms Access,Vba,Ado,我得到了一个ms access mdb文件,其中包含一些表。1是mdb中的本地表,另外2个表与远程ms sql server 2005上的odbc链接。我制作了一个表单和一个vba代码来执行表上的查询。但是我犯了一个错误。这两个表实际上是视图 以下是我的代码部分: thisMonthTable = "dbo_inbound_rated_all_" & currentYear & currentMonth If (currentMonth = "12") Then

我得到了一个ms access mdb文件,其中包含一些表。1是mdb中的本地表,另外2个表与远程ms sql server 2005上的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=“dbo\u inbound\u rated\u all”¤tYear¤tMonth
如果(currentMonth=“12”),则
nextMonthTable=“dbo\u inbound\u rated\u all”&nextYear&nextMonth
其他的
nextMonthTable=“dbo\u入站\u分级\u全部”&当前年度和下一个月
如果结束
使用cmdCommand
.ActiveConnection=混合连接

.CommandText=“从”&nextMonthTable&“A.imsi_number=B.imsi其中Datevalue(A.call_date)>=Datevalue(B.start_date)和Datevalue(A.call_date)第二个A在“&”之后和“内部连接”之前做什么


我不是SQL专家,但在我看来这并不正确。

如果conConnection是到SQL Server的ADO连接,则您为它提供的SQL可以而不是使用SQL Server不支持的Access/VBA函数。SQL Server中没有DateValue函数。

这几乎是胡乱猜测,但在使用access的乐观锁定时,我遇到了链接表的奇怪问题。尝试将.LockType更改为adLockReadOnly。

表“nextMonthTable”的别名。您可以发布dbo\u inbound\u rated\u all\u 201012和dbo\u inbound\u rated\u all\u 201101的SQL吗?什么SQL?发布视图定义对我来说并不方便。抱歉。在这种情况下,视图定义是否完全相同(除了一个简单的where子句)?您可以组合解决方案代码的第三行和第四行:
nextYear=LTrim(Str(temp))
conConnection正在连接到mdb,其中mdb包含两个链接到sql server的表(视图)。当其中一个查询在VBA中运行正常时,我的问题是为什么第二个查询失败?
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)))
CommandText = "SELECT A.* FROM " & nextMonthTable & " A Inner Join opt_in_customer