Accessでのエラー

このQ&Aのポイント
  • Access修行中の身で、勉強をかねて書類BOXのデータベースを作成中です。
  • クエリで複合テーブルを作成し、データを入力しようとすると、エラーが発生します。
  • 保存箱IDは入力しなくてもいいフィールドにしたいが、子テーブルに新たにレコードが追加されるようにしたいです。
回答を見る
  • ベストアンサー

Accessでのエラー

Access修行中の身で、勉強をかねて書類BOXのデータベースを作成中です。 親テーブルのフィールド  ID(主キー、オートナンバー)、タイトル名、・・・・・、保存箱ID 子テーブルのフィールド  保存箱ID(主キー、オートナンバー)、保存箱名、・・・・ リレーション  親:保存箱ID-子:保存箱ID という構成です。 クエリで以下のような複合テーブルを作成し、 複合テーブルのフィールド  ID(主キー、オートナンバー)、タイトル名、・・・、保存箱名、・・・・ データを入力しようとすると、「レコードを追加できません。テーブルの結合キーがレコードセットにありません。」というエラーがでます。また、保存箱IDに入力のないレコードは、抽出されません。 どのようにしたいかというと、保存箱IDは入力しなくてもいいフィールド(関連させなくてもよいデータ)にしたく、複合テーブルで保存箱名を入れると、子テーブルに新たにレコードが追加されるようにしたいです。 できれば、SQLを使用せずに解決したいと甘えておりますが、無理でしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> 保存箱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 ※「リスト外イベント」は、「子テーブルにないデータだった場合に即座に追加」するための   一手段ですので、あくまで参考までに、ということで。 不明な点などありましたら、またご質問下さい。 (わかる範囲でしたら、お応えします)

shinachobi
質問者

お礼

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

その他の回答 (1)

  • arare2005
  • ベストアンサー率31% (63/199)
回答No.1

テーブルの構成、結合方法(キー)も悪い様です。 記載の通りであれは、関連付けられるキーは1:Nのキーで、結合するキーは保存箱名になるかと思います。が、日本語をキーにすると後々、更新等で不具合が出そうですが... 推測ですが、親子関係を築きたい(親:ヘッダー、子:明細)のであれば、子に親のオートナンバーを与えれば済みます。これが1番シンプルな気がいたしますが... ご質問の意図されている事と違いましたら、ご容赦下さい(^^;

shinachobi
質問者

お礼

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

shinachobi
質問者

補足

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

関連するQ&A

  • Access2003 データ型 オートナンバーについて エクセルからテ

    Access2003 データ型 オートナンバーについて エクセルからテーブルをインポートする方法 主キーである、IDと名をつけたフィールドのデータ型は"オートナンバー"でレコード新規入力際、自動で番号がふられていくようにしています。 このテーブルにエクセルのレコードをインポートして追加したいのですが、インポートできません。 ※オートナンバーフィールドが原因と思われます。 どうすれば、エクセルからこのテーブルにレコードをインポートし、追加されたレコードにオートナンバーで番号を割り振る事が出来ますででしょうか? 最も、シンプルな方法をお教え願います。

  • フォームから2つのテーブルにデータを書き込みたい

    Accessで T_aテーブルとT_bテーブルがありそれぞれのフィールドが以下のようになっているとします。 T_a:フィールド名 データ型    ID  オートナンバー型    商品番号 テキスト型 主キー T_b:フィールド名 データ型    ID  オートナンバー型 主キー    商品番号 テキスト型 このときフォームから入力したデータをそれぞれのテーブルの商品番号に追加したいのですがどのようにすればよいのでしょうか。  よろしくお願いいたします。

  • Accessでの新規レコードの追加の方法

    Windows XP上でMicrosoft Access 2000を使用しています。 オートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加したいのですが、クエリやそれを基にしたフォームを介した方法はもちろんのこと、テーブルをデータシートビューで表示した状態でも追加することができません。 例えばレコードセレクタからレコード追加を選んでレコード保存を選んでも追加されません。 このテーブルに別のフィールドを追加してデータを入れるとレコードの追加が可能なのですが、オートナンバー型フィールド1つのみではうまくいきません。 どなたかオートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加する方法を御存知でしたら御教示下さいませ。

  • 主キーはオートナンバー型のIDを使った方が良いのか

    主キーはオートナンバー型のIDを使った方が良いのか、 独自の主キーを作った方がいいのか? 今は テーブル1 ------------------- IDフィールド(オートナンバー型) 主キー 1 2 3 ------------------- 伝票番号フィールド A001 A001 A002 ------------------- 部署フィールド 営業部 システム部 営業部 ------------------- 金額フィールド 100 200 300 ------------------- という状態ですが、 新たに主キーフィールドを作り 更新クエリで UPDATE テーブル1 SET テーブル1.主キー = [テーブル1]![伝票番号] & [テーブル1]![部署] & [テーブル1]![金額]; をして、主キーを独自に作った方がいいのか。 アクセスを作るにおいて、どちらの方が良いのでしょうか? テーブルのレコードは削除したりする事もあるので、オートナンバー型だと空きができてしまいます。 レコードに空きができないデータベースなら、オートナンバー型、 空きができるデータベースなら、独自に作った主キーにしたほうがいいのでしょうか?

  • ACCESSで一括レコード更新

    あるテーブルのレコードを、別のテーブルのレコードで更新したいです。具体的には、 二つのテーブルは同じフィールドを持っています。 フィールド名はID、名前、住所、電話で構成されています。 テーブルA  001 山田 東京 123456  002 田口 千葉 234567  003 鈴木 埼玉 345678  004 斉藤 佐賀 456789  005 上野 大阪 567890 テーブルB  003 鈴木 長野 345678  004 斉藤 佐賀 890123  008 野口 京都 090909 テーブルAとBでIDが一致するレコードだけテーブルAのレコード をそっくり入れ替えるにはどうしたらいいでしょうか。 この場合、003と004のレコードだけ更新します。 テーブルAのIDは主キーでオートナンバー型になっています。

  • Microsoft Accessでどうしても上手くいきません。

    (1)テーブル作成クエリ クエリA で テーブルB を作ります。 (2)テーブルB にフィールドを一つ追加して、変更を保存 (3)テーブルB のレコードを削除 (4)クエリA を 追加クエリ に変更 で追加クエリAを実行すると、入力規則違反でレコードの追加ができません。 追加するフィールドは、オートナンバー型です。 以前は同様の作業で成功したんですけど・・・ すみません助けてください

  • Access VBAで自動連番を振るには

    Access2000で株主管理DBを作成中です。 【テーブル名】T_株券管理 【フォーム名】F_株主入力 【フィールド名】株主ID(テキスト型)(主キー) フォームに入力する際にオートナンバーを使用せずに、 レコードが切り替わると「株主ID」が「00001」「00002」「00003」・・・・というように1づつ発番されるようにしたく、AccessVBAの本を読んだり、ネットでDmax等調べているのですが、必要な情報が探せずに困っています。お手数ですが教えて頂けますでしょうか。よろしくお願い致します。

  • Access VBAで自動連番を振るには

    【テーブル名】T_株券管理 【フォーム名】F_株主入力 【フィールド名】株主ID(テキスト型)(主キー) フォームに入力する際にオートナンバーを使用せずに、 レコードが切り替わると「株主ID」が「00001」「00002」「00003」・・・・というように1づつ発番されるようにしたく、AccessVBAの本を読んだり、ネットでDmax等調べているのですが、必要な情報が探せずに困っています。 本当はオートナンバーでIDを振っても良いのですが、レコードの削除等行った時に歯抜けになってしまうので、うる覚えで申し訳ないのですが・・・確か、フォームのテキストボックスのプロパティ、コードビルダでVBを「レコードが移動した際に」→「株主IDが0の場合に”00001”を、0でない場合には既存の数値に+1した数値をテーブルT_株券管理の”株主ID”に入力する。」といった感じの記述がしてあったと思います。VB初心者なので、説明が上手くできずにすみません。 このような記述方法はありますでしょうか?

  • access2007のオートナンバーについて

    access2007のオートナンバーについて こんにちは、さっそくですが質問させていただきます。 accessの勉強を始めた者ですが、 オートナンバーを指定したフィールドと、その他の必要な項目の フィールドから成るテーブルを作成して、 オートナンバー1~3までのレコードを入力して、 オートナンバー3のレコードを削除した時、 そのあとで、レコードを追加すると、 オートナンバー4のレコードが作成されるのですが、 このレコードをオートナンバー3のレコードとして、 作成することはできるのでしょうか? そのような設定ができろのかどうか、もしできるのであれば、 その方法や、参考になるサイトなど、なにぶん初心者ですので 教えていただけないでしょうか。 よろしくお願いします。

  • アクセス

    文献番号テーブルには、文献番号(主キー)、文献、著者名が並んでいます。 コメントテーブルには文献番号(数値型、空欄)、コメント、コメントID(主キー、オートナンバー)が並んでいます。 文献番号テーブルの文献番号キーを、コメントテーブルの文献番号(空欄)フィールドに落とし込む方法はないでしょうか?

専門家に質問してみよう