2011-03-23 137 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