• ベストアンサー
  • 暇なときにでも

Accessでのエラー

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1306
  • ありがとう数3

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

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

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

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

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

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

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

その他の回答 (1)

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

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

関連するQ&A

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

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

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

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

  • Accessでのテーブル作成や追加クエリなどについての質問です。

    ◆テーブル作成クエリで作成するテーブルにオートナンバー型のフィールドを設けたい。◆ (ナンバーが必ず1から振られることが条件) ※補足※ あらかじめオートナンバー型を含むテーブルを用意し、追加クエリ&削除クエリを使用すればよいという意見もありますが、この場合オートナンバー型のフィールドはカウントをアップし続けてしまう為断念。 ★教えてほしい事★ テーブル作成クエリからオートナンバー型のフィールドを作成できるのか? もしくは あらかじめオートナンバー型を含むテーブルを用意し削除クエリでテーブルのデータを空にしてから追加クエリでデータを入力しても必ずオートナンバー型のフィールドの先頭値は"1"から始まるようにできるか? 宜しくお願い致します。

  • Accessで連続データってできますか?

    Aテーブル(データベース)からBテーブルに必要なレコードを抽出して、Bテーブルで編集しています。 Bテーブルで編集したレコードをCテーブルに移動する際に、連続データのフィールドが必要になったので、テーブルのオートナンバー型フィールドを一つ追加しましたが、うまくいきません。 追加クエリでB→Cに移動させるんですが、キー違反がでてクエリが動きません。 できれば、クエリで連続データを作成して、Cテーブルに追加させたいんですが、クエリで連続データって作れるものなのでしょうか?

  • Accessへのインポートについて

     Excelで作成したリストを、Accessのテーブルへ追加インポートした時、インポートはできるのですが、主キー(フィールド名はID、オートナンバーに設定)の数値がとんでしまって、大きな数値が入力されてしまいます。  ExcelのIDのセルには空白にしてあります。  そこで疑問なのは、うまくいく時といかない時があることです。  たとえば一つのリストをインポートしたら1~100までちゃんと連番で入るのに、次のリストをインポートしたら、100000~という風になります。  これは何が問題なのでしょうか。同じように設定・作業をしているのですが・・・。  よろしくお願いします。

  • 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は主キーでオートナンバー型になっています。

  • ACCESS・重複データ入力をエラーに

    ACCESS2002です。 本日日付が規定値入力されるフォームがあります。基となっているテーブルの「日付」フィールドには主キーが設定されていて、同一日のデータを入力してもレコードとして保存されないようになっています。 しかし、保存の有無がテーブルを直接見ないと判断できないため、システムとしては大変不便です。 そこで、すでに同一日のレコードが存在する場合は、入力終了のボタンを押した時にでも、「すでに同一日での入力があります。このデータは保存されません。」といったメッセージが表示されるようにしたいんですが、どのようにすべきなのかが判りません。 皆さんの知恵をお貸し下さい。

  • 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のレコードとして、 作成することはできるのでしょうか? そのような設定ができろのかどうか、もしできるのであれば、 その方法や、参考になるサイトなど、なにぶん初心者ですので 教えていただけないでしょうか。 よろしくお願いします。