2017-09-20 8 views
1

別のレコードセットのVBAを使用してレコードセットを開きたいとします。レコードセットからレコードセットを開く方法は?

私はSQLを書いて、new_entryとvalid_unit

' valid_unit 
SELECT * 
FROM import_raw_data 
WHERE unit_name IN (SELECT unit_name FROM unit); 

' new_entry 
SELECT * 
FROM valid_unit 
WHERE id NOT IN (SELECT id FROM serviceman); 
WHERE 

名前付きクエリにそれを保存する場合、これは動作しますが、私が代わりにクエリを保存するので独占的にVBAでこれを行うしたいと思います。

Sub testing() 
    valid_unit_sql = _ 
     "SELECT * " _ 
     & "FROM import_raw_data" 
     & "WHERE unit_name IN (SELECT unit_name FROM unit); 

    new_entry_sql = _ 
     "SELECT * " 
     & "FROM (" & valid_unit_sql & ") " _ 
     & "WHERE id NOT IN (SELECT id FROM serviceman);" 

    With CurrentDb 
     Set valid_unit = .OpenRecordset(valid_unit_sql) 
     ' valid_unit works great 
     Set new_entry = .OpenRecordset(new_entry_sql) 
     ' this doesnt, it errors out 
    End With 
End Sub 

私はこれをどのようにして知っていますか?代わりにvalid_unitクエリとFROM valid_unitを保存する必要がありますか?

+0

あなたのコードは無効で、それを修正し、作業コードを表示してください。 [VBAで動的SQLをデバッグする方法](http://stackoverflow.com/questions/418960/managing-and-debugging-sql-queries-in-ms-access/1099570#1099570) - ifそれはあなたの質問に 'Debug.Print new_entry_sql'の出力を追加するのに役立ちません。 – Andre

+0

また、* "errors out" *はあまり役に立ちません。完全なエラーメッセージを追加してください。 – Andre

+0

それを指摘してくれてありがとう、ありがとうコードと誤った説明のないエラーメッセージの謝罪。私は将来の質問のためにそれをメモします! –

答えて

0

"と改行継続& _はちょっと混乱しています。私はそれがコピー貼りエラーか、これがあなたの実際のコード(コンパイルされていないかどうか)を知ることはできません。

とにかくこれを試してみてください。

Sub testing()  
    valid_unit_sql = "SELECT * " & _ 
        "FROM import_raw_data " & _ 
        "WHERE unit_name IN (SELECT unit_name FROM unit)" 

    new_entry_sql = "SELECT * " & _ 
        "FROM (" & valid_unit_sql & ") AS T " & _ 
        "WHERE T.id NOT IN (SELECT id FROM serviceman);" 

    Debug.Print new_entry_sql 

    With CurrentDb 
     Set valid_unit = .OpenRecordset(valid_unit_sql) 
     Set new_entry = .OpenRecordset(new_entry_sql) 
    End With 
End Sub 

出力SQL:

SELECT * 
FROM 
    (
     SELECT * 
     FROM import_raw_data 
     WHERE unit_name IN (SELECT unit_name FROM unit) 
    ) AS T 
WHERE T.id NOT IN (SELECT id FROM serviceman); 
+0

ありがとう!私はFROM ASを指定しなければならないことを知らなかった –

関連する問題