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の操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。