クエリでテーブルを更新するのは難しい
のでは。
(1)
質問の●・△・■ を順番に、
F1、F2、F3とします。
もし、●・△・■ が一つの
フィールドならば少しコードを
変える必要があります。
以下のSQL文でクエリを作ります。
新しいクエリをSQLビューにして、
以下のSQL文をコピーし貼り付け、
保存します。名前を「クエリ差分」とします。
SELECT A.電話番号, B.F1, B.F2, B.F3
FROM A, B
WHERE (((A.電話番号)=[B].[電話番号])) OR (((A.住所)=[B].[住所])) OR (((A.名前)=[B].[名前]));
次に、フォームにボタンを一つ設定し、
名前を「cmd抽出」とします。
ボタン「cmd抽出」の上で右クリックして
プロパティシートを開き、その中の「クリック時」
のところで右端をクリックして、「ビルダの選択」
というフォームを表示し、その中の「コードビルダ」
を選択して、「OK」のボタンを押します。
コード表が開かれるので、表示されたコードを
以下のように設定します。
DAOを使っているので、コード表のツールから
参照設定を選択して、
Microsoft DAO xx Object Library
にチェックを入れて、OKとします。xxは3.6のような数字です。
このとき、
Microsoft ActiveX Data Objects xx Library
にチェックが入っていたらはずしてください。
Private Sub cmd抽出_Click()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Set db = CurrentDb
Set rs1 = db.OpenRecordset("A", dbOpenDynaset)
Set rs2 = db.OpenRecordset("クエリ差分")
If rs2.RecordCount > 0 Then
rs2.MoveFirst
Do Until rs2.EOF
Do Until rs1.EOF
If rs2!電話番号 = rs1!電話番号 Then
rs1.Edit
rs1!F1 = rs2!F1
rs1!F2 = rs2!F2
rs1!F3 = rs2!F3
rs1.Update
Exit Do
End If
rs1.MoveNext
Loop
rs2.MoveNext
Loop
End If
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub
(2)
クエリのデザインビューで結合線の矢印がAからBに
向かっていますか。
フィールドには何を表示する設定になっていますか。
そのとき、表示するフィールドのテーブルは何を
指定していますか。
SQL文だと、
SELECT A.電話番号
FROM A LEFT JOIN B ON A.電話番号 = B.電話番号;
のようになっていますか。
質問者
補足
ご回答ありがとうございます。
今回、テーブルを更新するのではなく、表示のみでよかったので、
piroin654様よりお教えいただきました、差分クエリとAテーブルをつなぎ
目的のA+F1・F2・F3を表示する事ができました。
言葉が足りなかったようで大変お手数をお掛けしました。
(2)
>クエリのデザインビューで結合線の矢印がAからBに向かっていますか。
向かっています。
>フィールドには何を表示する設定になっていますか。
Aの全てとBのF1・F2・F3です。
>そのとき、表示するフィールドのテーブルは何を指定していますか。
Aの全てとBのF1・F2・F3です。
>SQL文だと、
>SELECT A.電話番号
>FROM A LEFT JOIN B ON A.電話番号 = B.電話番号;
このようになっています。↓
SELECT
FROM A LEFT JOIN B ON A.電話番号 = B.電話番号;
Bテーブルに重複がある限り仕方がないのですね。
ありがとうございました。
補足
ご回答ありがとうございます。 今回、テーブルを更新するのではなく、表示のみでよかったので、 piroin654様よりお教えいただきました、差分クエリとAテーブルをつなぎ 目的のA+F1・F2・F3を表示する事ができました。 言葉が足りなかったようで大変お手数をお掛けしました。 (2) >クエリのデザインビューで結合線の矢印がAからBに向かっていますか。 向かっています。 >フィールドには何を表示する設定になっていますか。 Aの全てとBのF1・F2・F3です。 >そのとき、表示するフィールドのテーブルは何を指定していますか。 Aの全てとBのF1・F2・F3です。 >SQL文だと、 >SELECT A.電話番号 >FROM A LEFT JOIN B ON A.電話番号 = B.電話番号; このようになっています。↓ SELECT FROM A LEFT JOIN B ON A.電話番号 = B.電話番号; Bテーブルに重複がある限り仕方がないのですね。 ありがとうございました。