Access でテーブルを保存するときに"定義されたフィールドが多すぎます" エラー

中程度: 基本的なマクロ、コーディング、相互運用性のスキルが必要です。

この記事は、Microsoft Access データベース (.mdb) にのみ適用されます。

現象

新しいフィールドを追加した後、または既存のフィールドのプロパティを変更した後にテーブルを保存すると、次のエラー メッセージが表示されます。

定義されているフィールドが多すぎます。(エラー 3190)

このメッセージの後に次のメッセージが続きます。

保存中にエラーが発生しました。 データ型は変更されませんでした。

テーブルに定義されているフィールドが 255 個以下であっても、これらのメッセージを受け取ります。

メモ また、フィールドが多すぎるテーブルに基づくレポート内のフィールドを追加または変更すると、このメッセージが表示されます。

原因

テーブル内のフィールド数を追跡するために Microsoft Access が使用する内部列数は、テーブル内のフィールド数が 255 個未満であっても 255 に達しています。 これは、フィールドを削除するときに、Access によって内部列数が変更されないために発生する可能性があります。 また、プロパティを変更するすべてのフィールドに対して、新しいフィールド (内部列数を 1 ずつ増やす) も作成されます。

解決方法

削除されたフィールドまたはプロパティを変更するフィールドの内部列数を解放するには、次のいずれかの操作を行います。

  • データベースを圧縮します。 そのためには、[ツール] メニューの [データベース ユーティリティ] をポイントし、[データベースの圧縮と修復] をクリックします。

  • テーブルの新しいコピーを作成します。 そのために、以下の手順に従ってください。

    1. テーブルとのリレーションシップをメモします。
    2. テーブルを選択します。
    3. [ファイル] メニューの [名前を付けて保存] をクリックします。
    4. [テーブル名の保存] ボックスに新しい名前を入力し、[OK] をクリックします。
    5. 手順 2 で選択したのと同じテーブルを選択し、DELETE キーを押します。
    6. 手順 3 で保存したテーブルの名前を元のテーブル名に変更します。
    7. 新しいテーブルとのリレーションシップを再確立します。

詳細

Access では、テーブルに最大 255 個のフィールドを定義できます。 255 個のフィールドを作成し、10 個を削除した場合、Access は内部列数からフィールドを解放しません。 また、プロパティを変更するすべてのフィールドに対して、Access によって新しいフィールドが作成され、元のフィールドが内部列数から解放されることはありません。

動作を再現する手順

注:

この記事のサンプル コードでは、Microsoft Data Access オブジェクトを使用します。 このコードを正しく実行するには、Microsoft DAO 3.6 オブジェクト ライブラリを参照する必要があります。 これを行うには、Visual Basic エディターの [ツール] メニューの [参照] をクリックし、[Microsoft DAO 3.6 オブジェクト ライブラリ チェック] ボックスが選択されていることを確認します。

  1. 次のVisual Basic for Applications コードを作成して、255 フィールドの新しいテーブルを作成します。
' ****************************************************************
' Declarations section of the module
' ****************************************************************
    
Option Compare Database
    Option Explicit
    
    ' ****************************************************************
    ' The Fill_Table() function creates a table in the current database
    ' named Field Test with 255 fields, each of which has a Text data
    ' type and a size of one character.
    ' ****************************************************************
    
    Function Fill_Table()
    
    Dim mydb As DAO.Database
       Dim tbl As DAO.TableDef
       Dim fld As DAO.Field
       Dim i As Integer
    
    Set mydb = CurrentDb()
       Set tbl = mydb.CreateTableDef("Field Test")
          For i = 0 To 254
             Set fld = tbl.CreateField("Field" & CStr(i + 1))
             fld.Type = dbText
             fld.Size = 1
             tbl.Fields.Append fld
          Next i
          mydb.TableDefs.Append tbl
    
    End Function
  1. [イミディエイト] ウィンドウに次の行を入力して関数を実行し、テーブルを作成します。

    Fill_Table
    
  2. [デザイン] ビューで [フィールド テスト] テーブルを表示し、テーブルに定義されているフィールドが 254 個だけになるように最後のフィールドを削除します。

  3. フィールドをもう一度追加し、テーブルを保存します。 次のエラー メッセージが表示されることに注意してください。

    Too many fields defined.
    
    Errors were encountered during the save operation. Fields were not added. Properties were not updated.
    

関連情報

データベースの仕様の詳細については、[ヘルプ] メニューの [Microsoft Access ヘルプ] をクリックし、Office アシスタントまたは応答ウィザードで「Access の仕様」と入力し、[検索] をクリックして返されたトピックを表示します。