解决方案:
事实证明,我只是在 WHERE 条件下使用了错误的标准。我试图排除的 LOCATION 有很多变体,但我没有看到差异。感谢 Remou 在聊天中帮助我!
问题:
我有一个包含 DB2 链接表的 Access 2007 实例。我还有一个 Excel 2010 VBA 脚本可以访问同一个 DB2 表。
从这个 DB2 表中,我选择了一个用户 ID、位置、报告经理 ID 和报告经理位置。前 3 个字段是直接存储的,而报告经理位置只能通过链接 userID 和报告经理 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