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
大寫。據我所知,Excel是區分大小寫的。 – Fionnuala
@Remou你是不是在'NOT IN('location one')'部分?我的查詢和數據庫中的內容都是一樣的。 – hacket
是的,我知道'A'不等於Excel中的'a'。我還沒有測試過'A'是否是'IN(「a」)'我認爲空白/空值也有問題。 – Fionnuala