Access の [自動番号] フィールドを含むテーブルに新しいレコードを挿入しようとすると、エラー メッセージが表示される場合があります

元の KB 番号: 884185

現象

Autonumber フィールドを持つテーブルに新しいレコードを挿入しようとすると、次のエラー メッセージが表示されることがあります。

インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。 (エラー 3022)

テーブルに新しいレコードを挿入した後のエラー メッセージのスクリーンショット。

注:

テーブルにリレーションシップやインデックスがない場合があります。

原因

この問題は、[ オートナンバー] フィールドに誤ってシードが設定されている場合に発生します。

解決方法

この問題を解決する方法は複数あります。

方法 1: コンパクトと修復を実行する

データベースを圧縮するには、次の手順に従います。

  1. Access を開始します。

  2. Access データベースを開きます。

    注:

    [セキュリティの警告] ダイアログ ボックスが表示されたら、[開く] をクリックします。

  3. [データベース ツール] リボン タブをクリックし、[ツール] グループ内の [データベースの圧縮と修復] をクリックします。

    注:

    以前のバージョンの Access には、[データベースの圧縮と修復] オプションが他の場所にある場合があります。このオプションを見つけるには、特定のバージョンの Access のドキュメントを参照してください。

Autonumber フィールド シードを手動でリセットするには、次のいずれかの方法を使用します。

方法 2: データ定義クエリを使用する

Access でテーブル (バックエンド データベース) を持つデータベースを開きます。

  1. [作成] タブで、[クエリ] グループの [クエリ デザイン] をクリックします。

  2. [ テーブルの表示 ] ダイアログ ボックスで、[ 閉じる] をクリックします。

  3. [デザイン] タブで、[結果] グループの [SQL ビュー] をクリックします。

  4. [クエリ 1] ウィンドウに次のように入力します。

    ALTER TABLE TableName ALTER COLUMN AutoNumFieldName COUNTER(iMaxID,1);
    

    注:

    <TableName> は、テーブルの名前の <プレースホルダーです。AutoNumFieldName> は、 Autonumber フィールドの名前のプレースホルダーです。 iMaxID は、フィールドの現在の最大値に 1 を加えたプレースホルダーです。

  5. [デザイン] タブの [結果] グループで [実行] をクリックします。

方法 3: コードVisual Basic for Applications実行する

  1. [ 作成 ] タブで、[ マクロ] の下矢印をクリックし、[ モジュール] をクリックします。

  2. Visual Basic エディターに次のコードを貼り付けます。

    Sub ResetAuto()
      Dim iMaxID As Long
      Dim sqlFixID As String
      iMaxID = DMax("<AutonumberFieldName>", "<TableName>") + 1
      sqlFixID = "ALTER TABLE <TableName> ALTER COLUMN <AutonumberFieldName> COUNTER(" & <iMaxID> & ",1)"
      DoCmd.RunSQL sqlFixID
    End Sub
    

    注:

    プレースホルダー <AutonumberFieldName> は、Autonumber フィールドの名前を表します。 プレースホルダー <TableName> は、テーブルの名前を表します。

  3. [実行] メニューの [Run Sub/UserForm]\(サブ/ユーザー フォームの実行\) をクリックします。

    注:

    いずれかのメソッドを使用する前に、テーブルを閉じる必要があります。 いずれかのメソッドを正常に使用した後、クエリまたはモジュールを保存する必要はありません

動作の再現手順

  1. 新しい空のデータベースを作成する

  2. 次の 2 つのフィールドを含む Table1 という名前の新しいテーブルを作成します。

    Field1: オートナンバー (主キー) Field2: Text

  3. 次の 6 つのレコードを Table1 に追加します。

    Field1 Field2
    1 A
    2 B
    3 C
    4 D
    5 E
    6 F
  4. Field1 の値が 3 のレコードを削除します。

  5. [作成] タブで、[クエリ] グループの [クエリ デザイン] をクリックします。

  6. [ テーブルの表示 ] ダイアログ ボックスで、[ 閉じる] をクリックします。

  7. [デザイン] タブで、[結果] グループの [SQL ビュー] をクリックします。

  8. [クエリ 1] ウィンドウに次のように入力します。

    INSERT INTO Table1 (Field1, Field2) SELECT 3 AS Field1, "C" AS Field2;
    
  9. [デザイン] タブの [結果] グループで [実行] をクリックします。

  10. Table1 を開き、新しいレコードを追加します。 「現象」セクションに記載されているエラー メッセージが表示されます。