1

解决方案:

事实证明,我只是在 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
4

1 回答 1

1

解决方案:

事实证明,我只是在 WHERE 条件下使用了错误的标准。我试图排除的 LOCATION 有很多变体,但我没有看到差异。感谢 Remou 在聊天中帮助我!

于 2013-10-09T16:16:46.677 回答