プロが教えるわが家の防犯対策術!

ACCESSパススルークエリでSQLサーバーのテーブルからデータをインポートする場合において
ACCESSのテーブルにあるデータを抽出条件としたいのですがSQL文の記述方法がわからなくて困っております。
根本的な考え方が間違っている可能性が高いのですがどのように記述したらよいか教えていただけますでしょうか。
よろしくお願いいたします。

・SQLサーバーのテーブル名(S_USR)
  USRID  MAIL
  10001  10001@test.com
  10002  10002@test.com
  10003  10003@test.com

・ACCESSのテーブル名(T_USR)
  USRID
  10001
  10003

・パススルークエリ名(Q_USR)←ACCESS上

・欲しい結果(T_RESULT)←ACCESS上のテーブル
  USRID  MAIL
  10001  10001@test.com
  10003  10003@test.com

自分で考えたVBAです。

Private Sub Command1_Click()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qDef As QueryDef
Dim tDef As TableDef
Dim SQLD As String
Dim SQLA As String

Set db = CurrentDb

'ACCESSテーブル内のデータを消す
SQLD = "DELETE * FROM T_RESULT"
DoCmd.RunSQL SQLD

'クエリの更新
db.QueryDefs.Delete "Q_USR"
Set qDef = db.CreateQueryDef("Q_USR")

'ODBC接続実施
qDef.Connect = "ODBC;"

'フォームから取得したパラメーターを使ったクエリの設定
qDef.SQL = "select USRID, MAIL from S_USR where ID.USRID=S_USR"

qDef.ReturnsRecords = True
Set rs = qDef.OpenRecordset(dbOpenSnapshot,dsbSQLPassThrough,dbReadOnly)

'追加クエリ
SQLA = "INSERT INTO T_RESULT (USRID, MAIL) FROM Q_USR (USRID, MAIL)
DoCmd.RunSQL SQLA

rs.Close
db.Close

MsgBox "終了"
Exit Sub
End Sub

A 回答 (1件)

>ACCESSのテーブルにあるデータを抽出条件としたい


qDefに代入するSQLを
SELECT USRID, MAIL FROM S_USR INNER JOIN T_USR ON S_USR.USRID = T_USR.USRID
とすれば良いのでは。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A