【问题标题】:How to get Around MS Access Column Number Limitation: Too Many Fields Defined如何绕过 MS Access 列数限制:定义的字段过多
【发布时间】:2017-12-16 09:59:16
【问题描述】:

我继承了一个设计非常糟糕的 MS Access 数据库。我正在重新设计,但同时我需要为当前版本提供增强功能。由于不同的数据类型问题,我不得不创建许多更改表查询来强制字段转换为正确的数据类型。长话短说,我在运行 alter table/alter column 查询时不时遇到“定义的字段过多”错误消息。我已经阅读了它,发现每当您运行更改列查询时,内部 MS Access 列计数都会增加。我可以通过点击压缩和修复按钮来解决这个问题。但是,当我的最终用户运行该程序时,我不希望他们必须这样做。有没有办法使用 VBA 以编程方式压缩和修复(检查关闭时压缩选项似乎不起作用)?或者我可以用 VBA 以某种方式重置内部表列数吗?

【问题讨论】:

  • “检查关闭时压缩选项似乎不起作用。”这很奇怪。用户有表格还是只有前端?
  • 您应该继续重新设计,直到应用程序在运行时不必更改字段。
  • 请为我们提供必要的代码来复制问题,关闭时压缩应该可以工作。请参阅this DBA question 以编程方式压缩,只有在数据库关闭时才能压缩。
  • 很明显,您正在重新设计数据库,但与此同时,我敢打赌,可能有另一种解决方案来不断更改列类型。听起来那是你事后添加的东西,所以你能不能只更改查询或代码以将数据按摩(即重新格式化、重构、转换)为适当的类型而不更改基础表列?
  • @C Perkins 我确实在事后添加了这个,但我不确定你所说的按摩数据是什么意思。我添加这么多 alter column 语句的原因是因为数据是从许多不同的客户端文件上传的。导入文件时,它们并不总是具有一致的数据类型,因此在用户导入客户端文件后,我有一个子过程运行 alter column 语句来按您所说的处理数据

标签: ms-access vba


【解决方案1】:

您只能压缩一个封闭的数据库 - 这意味着您的代码必须在单独的数据库中运行 - 因此您必须拆分前端,为后端数据库运行压缩例程,然后以编程方式附加表。压缩必须在 DAO 中完成,所以你需要一个参考

Sub CompactDatabaseRoutine()
Dim dbe As DBEngine
Dim source As String
Dim dest As String

Set dbe = DBEngine
source = "C:\Documents and Settings\user\My Documents\Sales2010.mdb"
dest = "C:\Documents and Settings\user\tempSales2010.mdb"

dbe.CompactDatabase source, dest
If Dir(dest) <> "" Then
Kill source
Name dest As source
End If


End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多