在 Access 中保存表时出现“定义的字段过多”错误

中等:需要基本的宏、编码和互操作性技能。

本文仅适用于 Microsoft Access 数据库 (.mdb) 。

症状

添加新字段或更改现有字段的属性后保存表时,会收到以下错误消息:

定义了过多字段。

此消息后跟:

保存期间遇到错误。 数据类型未更改。

即使表中定义了 255 个或更少的字段,也会收到这些消息。

注意 如果在基于字段过多的表的报表中添加或修改字段,也会收到此消息。

原因

Microsoft Access 用于跟踪表中字段数的内部列计数已达到 255,即使表中的字段数可能少于 255 个。 发生这种情况的原因是,当您删除字段时,Access 不会更改内部列计数。 Access 还会创建一个新字段, (修改其属性的每个字段的内部列计数增加 1) 。

解决方案

若要释放已删除字段或修改其属性的字段的内部列计数,请执行下列操作之一:

  • 压缩数据库。 为此,请在“工具”菜单上指向“数据库实用工具”,然后单击“ 压缩和修复数据库”。

  • 创建表的新副本。 为此,请执行以下步骤:

    1. 记下与表的任何关系。
    2. 选择表。
    3. 在“文件”菜单上,单击“另存为”。
    4. 在“保存表'表名称'到”框中,键入新名称,然后单击“确定”。
    5. 选择步骤 2 中选择的同一表,然后按 DELETE。
    6. 将步骤 3 中保存的表重命名为原始表名称。
    7. 重新建立与新表的任何关系。

更多信息

在 Access 中,一个表中最多可以定义 255 个字段。 如果创建 255 个字段,然后删除 10 个字段,Access 不会从内部列计数中释放字段。 此外,对于您修改其属性的每个字段,Access 会创建一个新字段,并且不会从内部列计数中释放原始字段。

重现行为的步骤

注意

本文中的示例代码使用 Microsoft 数据访问对象。 若要正确运行此代码,必须引用 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.
    

References

有关数据库规范的详细信息,请单击“帮助”菜单上的“Microsoft Access 帮助”,在“Office 助手”或“答案向导”中键入“Access 规范”,然后单击“搜索”查看返回的主题。