Access の [自動番号] フィールドを含むテーブルに新しいレコードを挿入しようとすると、エラー メッセージが表示される場合があります
元の KB 番号: 884185
現象
Autonumber フィールドを持つテーブルに新しいレコードを挿入しようとすると、次のエラー メッセージが表示されることがあります。
インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。 (エラー 3022)
注:
テーブルにリレーションシップやインデックスがない場合があります。
原因
この問題は、[ オートナンバー] フィールドに誤ってシードが設定されている場合に発生します。
解決方法
この問題を解決する方法は複数あります。
方法 1: コンパクトと修復を実行する
データベースを圧縮するには、次の手順に従います。
Access を開始します。
Access データベースを開きます。
注:
[セキュリティの警告] ダイアログ ボックスが表示されたら、[開く] をクリックします。
[データベース ツール] リボン タブをクリックし、[ツール] グループ内の [データベースの圧縮と修復] をクリックします。
注:
以前のバージョンの Access には、[データベースの圧縮と修復] オプションが他の場所にある場合があります。このオプションを見つけるには、特定のバージョンの Access のドキュメントを参照してください。
Autonumber フィールド シードを手動でリセットするには、次のいずれかの方法を使用します。
方法 2: データ定義クエリを使用する
Access でテーブル (バックエンド データベース) を持つデータベースを開きます。
[作成] タブで、[クエリ] グループの [クエリ デザイン] をクリックします。
[ テーブルの表示 ] ダイアログ ボックスで、[ 閉じる] をクリックします。
[デザイン] タブで、[結果] グループの [SQL ビュー] をクリックします。
[クエリ 1] ウィンドウに次のように入力します。
ALTER TABLE TableName ALTER COLUMN AutoNumFieldName COUNTER(iMaxID,1);
注:
<TableName> は、テーブルの名前の <プレースホルダーです。AutoNumFieldName> は、 Autonumber フィールドの名前のプレースホルダーです。 iMaxID は、フィールドの現在の最大値に 1 を加えたプレースホルダーです。
[デザイン] タブの [結果] グループで [実行] をクリックします。
方法 3: コードVisual Basic for Applications実行する
[ 作成 ] タブで、[ マクロ] の下矢印をクリックし、[ モジュール] をクリックします。
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> は、テーブルの名前を表します。
[実行] メニューの [Run Sub/UserForm]\(サブ/ユーザー フォームの実行\) をクリックします。
注:
いずれかのメソッドを使用する前に、テーブルを閉じる必要があります。 いずれかのメソッドを正常に使用した後、クエリまたはモジュールを保存する必要はありません
動作の再現手順
新しい空のデータベースを作成する
次の 2 つのフィールドを含む Table1 という名前の新しいテーブルを作成します。
Field1: オートナンバー (主キー) Field2: Text
次の 6 つのレコードを Table1 に追加します。
Field1 Field2 1 A 2 B 3 C 4 D 5 E 6 F Field1 の値が 3 のレコードを削除します。
[作成] タブで、[クエリ] グループの [クエリ デザイン] をクリックします。
[ テーブルの表示 ] ダイアログ ボックスで、[ 閉じる] をクリックします。
[デザイン] タブで、[結果] グループの [SQL ビュー] をクリックします。
[クエリ 1] ウィンドウに次のように入力します。
INSERT INTO Table1 (Field1, Field2) SELECT 3 AS Field1, "C" AS Field2;
[デザイン] タブの [結果] グループで [実行] をクリックします。
Table1 を開き、新しいレコードを追加します。 「現象」セクションに記載されているエラー メッセージが表示されます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示