こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

アクセスでリレーションテーブルがあるかを調べるVBA

例えば、作家名のテーブルと本のテーブルがあって、リレーションで結合されています。作家名.ID→本.ID
VBAで、全ての作家名のIDで、本.IDを検索したいです。
もし、該当するIDがなければ、デフォルトで本.IDと本.名前を追加更新したいです。作家名のテーブルのデータはあるとして、本は一部のデータしかないというケースです。
If rs.RecordCount = 0 Then
rs.AddNew
rs!ID = 作家名.ID
rs!名前 = "あくせすの本"
rs.Update
End If
rsをどう定義するか?
一括更新するために、Do Until rs.EOF をどういう風に使うか?
それとも、別のいい方法があればよろしくお願いします。

投稿日時 - 2007-01-26 17:14:50

QNo.2698088

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>決裁一覧テーブルは決裁ID、決裁番号、申請者、内容・・・
>CCテーブルはCCID、決裁ID、CC氏名といった感じです。
テーブルの様子は分かりましたがこれと最初の質問とはどうつながるのでしょう

投稿日時 - 2007-01-31 16:08:50

ANo.3

[作家名](ID、作家名)
[本](本ID、ID、名前)

・作家名.IDの番号が本.IDにない場合、下記のレコードを本に追加する。

本.ID=作家名.ID
本.名前="あくせすの本"
(本IDはオートナンバーですか?)


INSERT INTO 本 ( ID, 名前 )
SELECT 作家名.ID, 'あくせすの本' AS 名前
FROM 作家名 LEFT JOIN 本 ON 作家名.ID = 本.ID
WHERE 本.ID Is Null;

クエリで簡単に追加できると思います。

簡単に説明します

>FROM 作家名 LEFT JOIN 本 ON 作家名.ID = 本.ID
作家名テーブルを主にして、LEFT JOINで本テーブルと結合します。

>WHERE 本.ID Is Null;
本テーブルに作家名.IDと一致するレコードが無い場合、本.IDはNullになります。

>SELECT 作家名.ID, 'あくせすの本' AS 名前
この条件で選択した作家名.IDと、デフォルトの本の名前を

>INSERT INTO 本 ( ID, 名前 )
追加クエリで、本テーブルに追加します。

----------------------
Recordsetで処理する場合

'上記と同様、SQLで条件に適合する作家.IDだけ抽出します。
SQL = "SELECT 作家名.ID FROM 作家名 LEFT JOIN 本 ON 作家名.ID = 本.ID WHERE 本.ID Is Null;"

Set rs1 = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)
Set rs2 = CurrentDb.OpenRecordset("本", dbOpenDynaset)

Do Until rs1.EOF
 rs2.AddNew
 rs2!ID = rs1!ID
 rs2!名前 = "あくせすの本"
 rs2.Update
 rs1.MoveNext
Loop

投稿日時 - 2007-01-31 15:34:58

ANo.2

まだ変なこと言ってますよ
作家名が空欄だったとして
なぜそこに全く関係なく振られた作家IDのうち本IDと同じものをはめ込むのですか?
で、作家IDが空欄の本の名前はすべて
>”あくせすの本”
にしてしまうのですか

投稿日時 - 2007-01-27 11:37:59

お礼

そ、そうですね。これはあくまでも一例であって適切な例ではなかったです。すみません。

実をいうとアクセスで自動メールというものを作りまして、決裁したものにメールする機能です。ちなみにメール機能はBASP21.DLLを使っています。
http://www.hi-ho.ne.jp/babaq/basp21.html

それで、決裁一覧テーブルとメールのCCに送るテーブルを作っているんです。決裁一覧テーブルは決裁ID、決裁番号、申請者、内容・・・
CCテーブルはCCID、決裁ID、CC氏名といった感じです。
そして、CCは大体決まった人に送っているのでこれを自動化したいです。

最初からこういう質問すればよかったですね。申し訳ありません。

投稿日時 - 2007-01-27 13:28:55

ANo.1

なんかへんな事をしようとしているのじゃないですか

そもそも
>作家名のテーブルと本のテーブルがあって、
>リレーションで結合されています。作家名.ID→本.ID
これがおかしいですね

本の著者は一人の場合しか考えないとしても
[作家マスタ](作家ID、作家名、・・・)
[書籍マスタ](書籍ID、書籍名、作家ID、・・・)

この作家ID同士でリレーションシップを設定するというのが
普通の考え方ですよ

投稿日時 - 2007-01-26 19:56:55

お礼

CHRONOS_0さん

そうそう、そうです。表現が悪くて申し訳ありません。
[作家名](ID、作家名)
[本](本ID、ID、名前)
ということで、ID同士でリレーション設定です。分かりにくくて申し訳ありません。

それで、もし作家名.IDの番号がない本.IDがあればデフォルトでこの作歌名.IDと同じ番号の本.IDと名前に”あくせすの本”をテーブルに追加したいということです。
よろしくお願いします。

投稿日時 - 2007-01-27 10:31:31

あなたにオススメの質問