解決:
WHERE 条件で間違った基準を使用しているだけであることがわかりました。除外しようとしている LOCATION には多くのバリエーションがあり、違いはわかりませんでした。チャットで私を助けてくれたRemouに感謝します!
問題:
DB2 リンク テーブルを含む Access 2007 インスタンスがあります。同じ DB2 テーブルにアクセスする Excel 2010 VBA スクリプトもあります。
この 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