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

自己解決できず、どなたかお助けくださいませ。
環境:OS/Win7 ACCESS2010

やりたいことは、結合テーブルのクエリからPrimaryKeyを取得したいのです。

次の2つのテーブルと2つのフィールドを作成したとします。
Tbl_a.Fld_ID / Tbl_a.Fld_Name
Tbl_b.Fld.ID / Tbl_b.Fld_Sex
※どちらも Fld_ID フィールド を PrimaryKey 名でINDEX設定します。

ACCESSに次のクエリを作成したとします。
SELECT Tbl_a.Fld_ID, Tbl_a.Fld_Name, Tbl_b.Sex
FROM Tbl_a INNER JOIN Tbl_b ON Tbl_a.ID = Tbl_b.ID
クエリ名:Q_AandB

次のVBAを作成したとします。
※引数 VR には10万件の2次元配列 0:ID 1:氏名 2:性別 が入っている
Public Sub UpdateExe(Byval VR As Variant)
Dim DB As DAO.Database: Set DB = CurrentDB
Dim RS As DAO.Recordset: Set RS = DB.OpenRecordset("Q_AandB")
Dim Z As Long
With RS
For Z = 0 To UBound(VR)
.Index = "PrimaryKey" ← ここでエラーが出ます。
.Seek "=", VR(Z,1)
IF .NoMatch Then
.AddNew
!Fld_ID = VR(Z,0) 'ID
!Fld_Name = VR(Z,1) '氏名
!Fld_Sex = VR(Z,2) '性別
.Update
Else
.Edit
!Fld_ID = VR(Z,0) 'ID
!Fld_Name = VR(Z,1) '氏名
!Fld_Sex = VR(Z,2) '性別
.Update
End If
Next Z
.RS.Close
End With
Set RS = Nothing
DB.Close: Set DB = Nothing
End Sub

これを実行すると、「実行エラー'3251': この操作は、このタイプのオブジェクトには
実行できません。」 とのエラーで弾かれてしまいました。

結合テーブルでのプライマリキーの取得がわからず困っております。
以上、何卒よろしくお願い申し上げます。

A 回答 (1件)

Seek 出来るのはレコードセットタイプがDbOpenTableの場合だけです。


ヘルプより
『インデックス付きのテーブル タイプの Recordset オブジェクトで、現在のインデックスの指定された抽出条件を満たすレコードを検索し、そのレコードをカレント レコード にします 。』
で、
クエリの場合に Set RS = DB.OpenRecordset("Q_AandB", dbOpenTable)
と指定しても無効な処理として怒られます。
Seek(Index) を諦めて Rs.FindFirst (やや遅)にするとか
Rs.Filter(もっと遅)にするとか
じゃないですかね。
    • good
    • 0
この回答へのお礼

神!

お礼日時:2014/12/12 17:00

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