【发布时间】:2012-10-02 14:14:06
【问题描述】:
解决方案:
事实证明,我只是在 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
【问题讨论】:
-
大写。据我记得,Excel 是区分大小写的。
-
@Remou 你的意思是在'NOT IN ('location one')'部分吗?我的查询和数据库中的所有内容都是一样的。
-
是的,我知道
A在 Excel 中不等于a。我没有测试A是否是IN ("a")我认为空白/空值也有问题。 -
我测试过,不是大写。顺便说一句,使用 NOT IN 的非常简单的查询在 Excel 中按预期工作,带有单引号。
-
@Remou 我已经用我的 Excel 代码更新了。
标签: ms-access excel db2 subquery vba