【问题标题】:maximum records in access table访问表中的最大记录
【发布时间】:2018-07-23 16:48:10
【问题描述】:

我最近遇到了达到表中记录的最大数量的问题,大约是 32567。我在尝试访问记录时遇到了溢出错误。我知道它是如何发生的,因为我表中只有大约 2000 条实际记录。是自动编号 ID 达到 32567。

这是因为我使用了两张桌子。文件和档案。 Documents 每天都充满了硬盘驱动器上一个文件夹中的所有文件。然后将其与表 Archive 进行比较,并从 Documents 表中删除所有重复记录。之后,新文件被添加到 Archive 表中,并且 Documents 表再次被清空。

但是,所有从 Documents 中删除的记录都使用了自动编号,这使得它快速增加。我应该怎么做才能防止这种情况发生?

问候 马可

【问题讨论】:

    标签: ms-access database-design autonumber


    【解决方案1】:

    自动编号和#records 均不限于 32567 (2^15 - 1)。

    您可能将Archive 中的ID 列定义为Integer(16 位)而不是Long(32 位)。

    将其更改为 Long,您将有很长的时间。 :)

    【讨论】:

    • 好吧,如果在 32567 之后出现问题,那么在您的表格或代码中某处 必须涉及Integer,它应该是Long。跨度>
    【解决方案2】:

    根据您的描述,您似乎正在使用 [Documents] 作为临时表。你可以扩展

    “Documents 表再次清空。”

    功能重新创建您的文档表,删除旧的。这将重置自动编号问题。

    DoCmd.TransferDatabase acImport, "Microsoft Access", currentproject.Path & "\" & currentproject.Name,acTable,"Documents","DocumentsFresh",structureonly:=true
    
    docmd.DeleteObject acTable,"Documents"
    Docmd.rename "Documents", acTable, "DocumentsFresh"
    

    另外请注意,如果您使用documents.autonumber 身份进行中继,则不应遵循此流程。仅当您需要临时表功能时才这样做。

    【讨论】:

    • Imo 删除表,即使删除所有记录并重新填充它,通常也是一个坏主意。如果存在依赖关系或关系(删除失败,查询将 [Fieldname] 更改为 [Fieldname] As Expr1),您可能会遇到麻烦。 Truncating 是一个更好的计划。
    • @ErikvonAsmuth 这是信息或想法的摘要。实现它取决于用户的实际需求。 SO 答案不仅可以回答 OP,还可以回答所有可能期望这种操作的未来读者。感谢您添加此危险。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多