2011-03-23 92 views
1

我得到了一个包含一些表的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个视图应该没问题且正确。

+0

你可以发布dbo_inbound_rated_all_201012和dbo_inbound_rated_all_201101的SQL吗? – 2011-03-23 03:18:43

+0

什么sql?我发布视图定义并不方便。抱歉。 – lamwaiman1988 2011-03-23 03:21:03

+0

在这种情况下,视图定义是否完全相同(除了简单的where子句)? – 2011-03-23 03:47:35

回答

0

什么是第二A做的只是“&‘后’和‘内加入’之前?

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

我不是SQL专家,但不正确的看向我。

+0

表的别名“ nextMonthTable”。 – lamwaiman1988 2011-03-23 02:33:21

1

如果conConnection是一个ADO连接到SQL Server,你喂SQL它可以未SQL Server支持不使用的接入/ VBA功能。在SQL Server中没有则DateValue功能。

+0

conConnection连接到mdb,其中mdb包含2个到sql server的链接表(视图)。当查询中有1个在VBA中运行正常时,我的问题是为什么第二个失败? – lamwaiman1988 2011-03-23 03:31:03

1

这大多是一种疯狂的猜测,但是在使用来自访问的乐观锁定时,我遇到了链接表的奇怪问题。尝试将您的.LockType更改为adLockReadOnly。

+0

这并没有帮助...... – lamwaiman1988 2011-03-23 04:29:19