アプリ版:「スタンプのみでお礼する」機能のリリースについて

Access修行中の身で、勉強をかねて書類BOXのデータベースを作成中です。

親テーブルのフィールド
 ID(主キー、オートナンバー)、タイトル名、・・・・・、保存箱ID
子テーブルのフィールド
 保存箱ID(主キー、オートナンバー)、保存箱名、・・・・
リレーション
 親:保存箱ID-子:保存箱ID
という構成です。

クエリで以下のような複合テーブルを作成し、
複合テーブルのフィールド
 ID(主キー、オートナンバー)、タイトル名、・・・、保存箱名、・・・・
データを入力しようとすると、「レコードを追加できません。テーブルの結合キーがレコードセットにありません。」というエラーがでます。また、保存箱IDに入力のないレコードは、抽出されません。

どのようにしたいかというと、保存箱IDは入力しなくてもいいフィールド(関連させなくてもよいデータ)にしたく、複合テーブルで保存箱名を入れると、子テーブルに新たにレコードが追加されるようにしたいです。

できれば、SQLを使用せずに解決したいと甘えておりますが、無理でしょうか。

A 回答 (2件)

テーブルの構成、結合方法(キー)も悪い様です。


記載の通りであれは、関連付けられるキーは1:Nのキーで、結合するキーは保存箱名になるかと思います。が、日本語をキーにすると後々、更新等で不具合が出そうですが...

推測ですが、親子関係を築きたい(親:ヘッダー、子:明細)のであれば、子に親のオートナンバーを与えれば済みます。これが1番シンプルな気がいたしますが...

ご質問の意図されている事と違いましたら、ご容赦下さい(^^;

この回答への補足

ご推察のとおり、保存箱名と保存箱IDを別としたのは、日本語を主キーにしないほうがいいと思ったからです。
この場合、親と子の関係が、∞対一なので、子に親のオートナンバーを与えるのは無理だと思うのですが。私の親と子という言い方がおかしかったですね。メインテーブルとサブテーブルという意味で、親と子という言葉を使っておりました。

補足日時:2005/11/06 09:58
    • good
    • 0
この回答へのお礼

すばやい回答どうもありがとうございます。

お礼日時:2005/11/06 10:11

> 保存箱IDに入力のないレコードは、抽出されません。



これに関しては、そのクエリをデザインビューで開いた後、親・子テーブルの「保存箱ID」を結合している線を右クリックし、「結合プロパティ(J)」を選択して、「親テーブルの全レコードと...」という方にチェックを入れてOKをクリックすれば、解決します。
(親テーブルの全レコードを表示した上で、子テーブルに該当データがあれば、それも表示する、というクエリになります)
・・・が。

> 複合テーブルで保存箱名を入れると、子テーブルに新たにレコードが追加されるように

の問題には、上記のクエリでは対処できません。
(子テーブルの「保存箱ID」が一対多の「一」側なので)

これに対処するには、
 a)親テーブルをレコードソースとするフォームを作成し、
 b)「保存箱ID」を、子テーブルをリストとするコンボボックスで表示させ、
 c)子テーブルにない「保存箱」を入力した場合には、それを子テーブルに追加するための
  フォームを別途で開く
とするのが、通常とられる手段かと思います。

◎親テーブルで、「保存箱ID」(数値型)フィールドをコンボボックスで表示させる方法:
 1)テーブルをデザインビューで開く
 2)「保存箱ID」にカーソルを移動
 3)画面右下の領域で、「ルックアップ」タブをクリック
 4)「表示コントロール」で、「コンボボックス」を選択
 5)「値集合ソース」に子テーブル名を、「列数」に「2」を、列幅に「0cm;3cm」を入力
  (子テーブルのフィールドの並び順が「保存箱ID、保存箱」の順だった場合)
*この設定をしておくと、親テーブルを元にフォームを作成して、フィールドリストからの
ドラッグアンドドロップでコントロールを追加した場合、自動的にコンボボックスになる
ようになります。

なお、「c)」については、フォームのコンボボックスに「リスト外入力時」イベントを設定してやる必要があります。
これについての説明は、以下を参照して下さい:

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1749600
※「リスト外イベント」は、「子テーブルにないデータだった場合に即座に追加」するための
  一手段ですので、あくまで参考までに、ということで。


不明な点などありましたら、またご質問下さい。
(わかる範囲でしたら、お応えします)
    • good
    • 0
この回答へのお礼

詳しい回答どうもありがとうございます。
上の件は、速攻解決いたしました。
下の件は、時間がかかりそうなので(なにぶん修行中の身なので)、
先にお礼を述べさせていただきます。
本当にどうもありがとうございました。

お礼日時:2005/11/07 23:13

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

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