2012-10-02 123 views
1

SOLUTION:Excel 2010 VBA DB2功能和Access 2007 DB2功能之間的區別?

事實證明,我只是在我的WHERE條件中使用了錯誤的標準。我試圖排除的位置有很多變化,我沒有看到區別。感謝Remou幫助我聊天!

問題:

我有一個包含DB2鏈接表的Access 2007實例。我也有一個Excel 2010 VBA腳本訪問同一個DB2表。

在此DB2表中,我選擇了一個用戶ID,位置,報告管理器ID和報告管理器位置。前3個字段直接存儲,而報告管理器位置只能通過鏈接用戶ID和報告管理器ID的子查詢來獲得,並獲取報告管理器ID的位置。

該查詢給了我正是我想要的 - >

SELECT DISTINCT main.USERID, main.LOCATION, main.REPORT_MGR_USERID, manager_data.LOCATION 
    FROM employee_table main 
    INNER JOIN employee_table manager_data 
    ON main.REPORT_MGR_USERID=manager_data.USERID 

然而,我發現,我不希望在結果中顯示某些位置。所以我開發了這個查詢 - >

SELECT DISTINCT main.USERID, main.LOCATION, main.REPORT_MGR_USERID, manager_data.LOCATION 
FROM employee_table main 
INNER JOIN employee_table manager_data 
    ON main.REPORT_MGR_USERID=manager_data.USERID 
WHERE main.LOCATION NOT IN ('location one', 'location two') 

唯一的區別是這樣的 - >

WHERE main.LOCATION NOT IN ('location one', 'location two') 

在Access 2007實例中運行時可正常工作,但在Excel的VBA實例不工作(我真的需要它)。我已驗證查詢字符串是完全相同的。

什麼使Access和Excel之間的工作不同?

編輯:

這裏是我如何在Excel中執行 - >

sqlString = "SELECT DISTINCT main.USERID, main.LOCATION, main.REPORT_MGR_USERID, manager_data.LOCATION " _ 
       & "FROM employee_table main " _ 
       & "INNER JOIN employee_table manager_data " _ 
       & "ON main.REPORT_MGR_USERID=manager_data.USERID " _ 
       & "WHERE main.LOCATION NOT IN ('location one', 'location two')" 

sConnection = "Provider=IBMDADB2.DB2COPY1;Persist Security Info=True;User ID=" & connectingUserID & ";Password=" & connectingPassword & ";Data Source=EmployeeInfoDB;Mode=Read" 

Set adoConnection = New ADODB.Connection 

Set nameRecordSet = New ADODB.Recordset 

adoConnection.Open sConnection 

nameRecordSet.Open Source:=sqlString, ActiveConnection:=adoConnection 
+0

大寫。據我所知,Excel是區分大小寫的。 – Fionnuala

+0

@Remou你是不是在'NOT IN('location one')'部分?我的查詢和數據庫中的內容都是一樣的。 – hacket

+0

是的,我知道'A'不等於Excel中的'a'。我還沒有測試過'A'是否是'IN(「a」)'我認爲空白/空值也有問題。 – Fionnuala

回答

1

SOLUTION:

事實證明,我只是使用了錯誤的標準,我的WHERE條件。我試圖排除的位置有很多變化,我沒有看到區別。感謝Remou幫助我聊天!