• ベストアンサー

アクセス2000のフォームについて

アクセスでまたつまずいてしまいました。ちょっと教えてください。 複数のテーブルから選択クエリを作り、それを基にオートフォームでフォームを作ったのですが、フォームでデータの入力が出来ません。クエリでもデータの入力が出来ません。 「このレコードセットは更新できません」と下のほうに出ます。 フォームのプロパティのデータの更新の許可と、データ入力用のところは“はい”になっています。 私では原因がわかりません。わかりにくい質問でしょうが、どなたかご指導お願いします。

  • mk114
  • お礼率39% (21/53)

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

  • ベストアンサー
  • Hk2001
  • ベストアンサー率48% (24/49)
回答No.3

No2さんと似たような回答になりますが SELECTしたデータが 主キーで結合でき 1:1、1:nやn:1の場合は、お互いの主キーをSELECTに加えてあれば 更新可能だと思います。 しかし n:nの場合は、更新できません。 具体的に表現すると 伝票テーブル  伝票NO      主キー  伝票日付        得意先ID 伝票明細Aテーブル  伝票NO      主キー  明細番号      主キー  伝票日付        商品ID  金額 は、 伝票テーブル.伝票NO → 伝票明細Aテーブル.伝票NOで結合すれば 更新OK    しかし 伝票明細Aテーブル  伝票NO      主キー  明細番号      主キー  伝票日付        商品ID  金額 伝票明細Bテーブル  伝票NO      主キー  伝票日付        科目ID      主キー  補助科目ID   は、 伝票明細Bテーブル.伝票NO → 伝票明細Aテーブル.伝票NOで結合しても n:nになるので更新不可 また 伝票明細Aテーブル  伝票NO      主キー  明細番号      主キー  伝票日付        商品ID  金額 商品マスタ  商品ID      主キー  商品名 を伝票明細Aテーブル.商品ID → 商品マスタ.商品IDと結合しても主キー同士で結合できないので更新不可です。 複数のテーブルを使うときは最後の形態がよく使われます。 伝票の中にマスタデータのキー情報を持ち名称をマスタから取得する場合など この条件に当てはまりませんか?

mk114
質問者

お礼

お世話になります。結局1つ別の選択クエリを作り、テーブルも違うのを新しく作り、この2つから選択クエリを作ったらなぜか出来ました。よく解らないままですが、アドバイスはよく解りました。今後の参考にします。 ありがとうございました。またお願いします。

その他の回答 (2)

  • sgh
  • ベストアンサー率61% (75/121)
回答No.2

簡単に説明すると、参照される側のテーブルへのリレーションが、主キーである必要があります。 つまりこういうことです。 "売上テーブル"と"商品マスタ"があったとして、 "売上テーブル"の商品コードと"商品マスタ"の商品コードを結合したいとします。 その場合、参照される側の"商品マスタ"は、"商品コード"が主キーでないと更新できません。 主キーで結合できない場合は、フォーム上のイベントを使うなどして、値を取得する工夫が必要です。

mk114
質問者

お礼

たびたびお世話になります。よく解りませんが解決できました。 ありがとうございました。

  • maro200
  • ベストアンサー率45% (15/33)
回答No.1

クエリーの内容によって、更新出来る項目とできない項目があります。 Accessのヘルプの質問のことろに 「クエリのデータを更新できない」 を入れて調べてみると詳細が書いてあります。

mk114
質問者

お礼

たびたびお世話になり、ありがとうございます。参考になりました。

関連するQ&A

  • アクセスのフォームを開くときに新しいレコードへ移動するには?

    アクセスの入力用のフォームを開くときに、新しいレコードへ移動させて、すぐに入力ができるようにしたいのですが、マクロを使っても「レコードセットの最後のレコードよりも後に移動することはできません」のエラーメッセージが出てしまい、新しい入力ができなくなってしまいました。プロパティの更新の許可、追加の許可、削除の許可はいずれも「はい」にしています。どうすれば新しいレコードの入力ができるのでしょうか?困ってます。

  • アクセスのフォームでデータ元をテーブルからクエリにかえたい

    上手く表現できるかどうかわからないのですが、頑張って書きます。少々長いです。 アクセスでフォームを使ってデータ入力しています。これは単純で、あるテーブルへのデータ入力をフォームを使ってやるだけのことです。このテーブルの中に「都道府県」というフィールドがあります。ある事情からこのフォームを使ってデータ入力(または修正)をするレコードは、「都道府県」のフィールドが「福岡県」のものだけでよくなりました。 そこで、「都道府県」に「福岡県」を持っているレコードだけを取り出すクエリを作ります。このクエリを元にして、同じフォームでデータ入力したいのです。入力項目は全く同じです。「福岡県」をもっているレコードだけが全く同じフォームで表示されるようにしたいのです。 もとのテーブル名を「全データ」とし、クエリを「福岡県抽出クエリ」と呼ぶとすると、どこかで「全データ」を「福岡県抽出クエリ」に書き換えればすべてのテキストボックスのデータ元が入れ替わってくれると思うのですが、それでいいのでしょうか。その場合、どうやったらいいのでしょう。 なぜ一からファームを作り直さないかというと、テキストボックスの大きさや配置を決めるのに膨大な労力を費やしていて、全部をやり直したくないからです。 どうかお願いします。ご指導ください。

  • Access 選択クエリーの入力制限

    Access97を使用しています。 選択クエリーを用いて単一テーブルの任意の列を表示 します。 元データは単一テーブルなので、選択クエリーに対して 新規レコードを追加すると、そのまま元のテーブルにも レコードが追加されますよね? この選択クエリーの機能を参照のみに限定し、 レコード追加・更新は制限したいのですが、これを実現 することはできるのでしょうか? データシート形式のフォームなら選択クエリーとほぼ 同じイメージで操作できるし、これならプロパティの 「追加の許可」「更新の許可」あたりを設定すれば レコード追加を抑制できると思いますが、極力選択 クエリーを使いたいんです。 よろしくお願いします。

  • Accessフォームの操作で

    2つの別々なフォームがあります。 それぞれのフォームの基になっているテーブルが別々にあります。 ひとつはデータが入力されているテーブルで もうひとつはフォームから入力していく空のテーブルです。 データが入力されているフォームでは、データ抽出するサブフォームを持っていて、 そこにあるレコードセレクタをダブルクリックすると もうひとつの空のテーブルから作成したフォームにデータを入力していくようにしたいんですけど、うまくいきません。 乱文でわかりにくいとは思います。 ご迷惑をおかけしますが教えてください。 よろしくお願いします。

  • Accessのフォーム

    Access2003を使用しています。 テーブルまたはクエリを元に作成したフォームにはテーブル・クエリに入力されているデータが表示されますよね? それらのデータをフォームから変更出来ないようにする方法はありますか? データ自体を非表示(入力用フォーム)にするのではなく、既存のデータは表示されるけど変更は出来ないという状態にしたいです。 ちなみに新規入力は行えるようにしておきたいです。 よろしくお願いします。

  • ACCESSのフォームで、絞込み検索すると重複したレコードが増えてしま

    ACCESSのフォームで、絞込み検索すると重複したレコードが増えてしまいます。 ACCESSのフォームで、コンボボックスを6ほど設置し、条件を絞り込んでデータを抽出するシステムを作成しました。 抽出自体は問題なく出来ているのですが、再クエリを実行した時、同じ抽出条件と結果が複数レコード表示されてしまいます。 調査した結果、フォームプロパティのレコードソースに設定していますクエリの実行結果の件数と同じ件数分増えてしまうようです。 そして、そのフォームをしばらく使用していますと、「これ以上テーブルを開くことができません。」とのメッセージが出てしまいます。 これも何か関係しているのでしょうか? いろいろと調べてみましたが、解決する事ができませんでした。ご指導、宜しくお願いします。

  • Accessのフォームについて教えてください。

    こんばんは。アクセス入門者です。 入門書やできるシリーズなどいくつかのアクセスの本を見たのですが、 フォームについて、理解できません。 ●担当者マスタ ■客先マスタ ★コードマスタ ▲売り上げ計画マスタ ◎売上げ結果マスタ テーブルを作り、それぞれのテーブルから必要な項目を集めて、クエリを作成しました。思ったとおりの結果になったので、これを元にフォームを作成しました。 思ったとおりの結果が表示されるのですが、このフォームに入力が出来ません。できなかったので、次の方法を試しました。 ★コードマスタと▲売り上げ計画マスタのデータをサブフォームに配置しデータを追加させようと思って、あらたにフォームを作りました。やはり、思ったとおりの表示はされるのですが、追加ができないのです。それぞれのテーブルには、★コードマスタを主にそれぞれ、一対多にリレーションを組んでいます。 1つのフォームで色々なテーブルに結果を反映できるように、参照整合性の更新、削除にもチェックを入れました。 この考えは間違っているのでしょうか。 ○○マスタとあるように、それぞれ1つのテーブルに1つのフォームにしなければならないのでしょうか。 複数のテーブルから取り出したデータの更新は無理なのでしょうか。 ある程度、クエリまで完成したのにフォームでつまずいて苦しんでいます。ご解答宜しくお願い致します。

  • ACCESS2000 クエリーを開いてテーブルのデータを更新したい

    ウィンドウズ98,ACCESS2000です。 二つのテーブルがあって、リレーションがあります。 これを元にクエリーを作成して、クエリーを表示させたフォームでデータの更新や削除を行いたいと思っております。 が、実際やろうとするとこのレコードセットは更新できませんとでます。 何か考えられる理由はありますか? よろしくお願いします。

  • Accessのフォームから削除したレコードをテーブルに保存したい

    Accessを利用してフォームからデータを入力しているのですが、クエリを使わずフォーム画面から不必要なレコードをコマンドボタンで削除しています。削除したレコードをテーブルに保存したいのですが、追加クエリで条件を決めずにフォームの画面から判断したレコードだけを削除し、かつ削除したレコードを削除専用のテーブルに追加する方法を教えてください。よろしくお願いします。

  • Access2003でのフォーム作成について(再度です)

    民宿の顧客管理をAccessでしようかと思っています。 氏名、住所、来客日などのフィールドを持つ顧客テーブル。 来客日、その日の献立1~17までを持つ日別献立テーブル。 この2つのテーブルからクエリーを作成し、 それを基にフォームを作ってデータを両方のテーブルに振り分けしようとしたんですが、うまくいきません。 クエリーで来客日同士を結ぶとデータは表示されますが新規の入力が出来ません。 顧客テーブルの顧客ID(オートナンバー)と 日別献立テーブルに顧客ID(数値型)を挿入し、2つを結んでも一方のデータしか表示されません。 おかしいとは思いますが、何がおかしいかわかりません。 何か良い方法があればお教え下さい。