1

解決:

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
4

1 に答える 1