ACCESS このレコードセットは更新できません、の対処法
ACCESSを使っていると、「このレコードセットは更新できません」という表示がでて困った経験はないでしょうか。
データを入力したり更新したいのにできない、と。
今回は、「このレコードセットは更新できません」と表示される場合の原因と対処法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSの基本的な使い方をご紹介していきます。
「このレコードセットは更新できません」と表示される原因
ACCESSのフォームでデータの入力や更新を行おうとすると、「このレコードセットは更新できません」と表示されたことはないでしょうか。
ACCESSで「このレコードセットは更新できません」と表示されるケースにはいくつかの原因が考えられます。
ただ、原因はフォームではなく、フォームのレコードソースになっているテーブルやクエリ側にあります。
主な原因として以下の3つが挙げられます。
1.1側のテーブルに主キーがない
2.多対多のリレーションシップが設定されている
3.集計クエリや計算フィールドである
それぞれについてご説明します。
1側のテーブルに主キーがない
最初はテーブルに主キーがないケースです。
例えば、フォームのレコードソースになっているクエリが下記の状態だとします。
商品テーブルと売上テーブルに商品IDによる1対多のリレーション設定がされており、商品テーブルの商品IDが1側、売上テーブルの商品IDが多側になっています。
しかし、商品テーブルの商品IDは主キーになっていません。
本来であればリレーション設定で参照される1側の値は主キーであり、ユニークである必要があります。
そうでないと、多側(今回は売上テーブル)から商品IDを参照した際に、商品テーブルにおなじ商品IDが複数あり、どのレコードを参照すればよいか分からなくなってしまうためです。
そのため、リレーション設定する際の1側のテーブルには主キーを設定しましょう。
今回の例では下記のようにすると無事にフォームでもレコードの更新ができるようになります。
過去の経験上、「このレコードセットは更新できません」と表示される原因のほとんどは、これが原因だと思います。
多対多のリレーションシップが設定されている
次に、多対多のリレーションシップが設定されているケースです。
フォームのレコードソースになっているクエリが下記のような場合です。
顧客テーブルと売上テーブルが、顧客IDでリレーション設定されています。
1側である顧客テーブルには主キーとしてNoが設定されていますね。
しかし、リレーション設定しているのは主キーであるNoではなく顧客IDです。
この場合、顧客テーブルでは顧客IDが重複する可能性があります。
実際に、顧客テーブルのデータはこのようになっています。
顧客IDが重複していますね。
この状態で顧客IDをリレーション設定すると、売上テーブルの顧客IDから参照された顧客テーブル側の顧客IDが一意にならないため、レコードの更新ができない状態になり、「このレコードセットは更新できません」と表示されます。
このケースでは顧客テーブルのテーブル設計を見直しましょう。
Noを削除し、顧客IDの重複をなくしたうえで顧客IDを主キーにすることで解決できます。
集計クエリや計算フィールドである
最後に、フォームのレコードソースが集計クエリや計算フィールドである場合です。
これはわかりやすいと思います。
例えば、下記のクエリは売上金額を集計しています。
クエリを表示するとこんな感じですね。
このクエリを元にしたフォームを作成しました。
当然、このフォームの金額はクエリ側で集計しているので、フォームから更新することはできません。
そのため、「このレコードセットは更新できません」と表示されます。
また、集計クエリではなくても、クエリに計算フィールドがあるケースもあります。
例えば下記のように、数量と単価をかけて金額を計算している場合です。
フォームにこの計算フィールドを元にしたコントロールを作成すると、こちらは「フィールド〇〇〇〇は式に基づいているので、編集できません」と表示されます。
このように、「このレコードセットは更新できません」と表示された場合は、フォームのレコードソースになっているテーブルやクエリに不備がないかを確認しましょう。
以上、このレコードセットは更新できません、の対処法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。