【问题标题】:How can I programmatically repair (not merely compact) an Access .mdb file?如何以编程方式修复(不仅仅是压缩)Access .mdb 文件?
【发布时间】:2008-09-26 20:35:45
【问题描述】:

我有一个损坏的数据库。如果我在 MS Access 中打开它,MS Access 会提供修复它,它会成功。

我怎样才能用代码做到这一点?在未安装 MS Access 的机器上。

我通过尝试知道 JRO.JetEngine.CompactDatabase 不起作用。

换句话说,我想做 Access 或 JETCOMP.exe 正在做的事情,而不是 JRO.JetEngine.CompactDatabase 正在做的事情。

【问题讨论】:

  • 呃,你试过JetComp吗?如果它不起作用,则无法使用 Microsoft 提供的任何工具修复数据库,您需要聘请恢复损坏的 Jet MDB 的人员。我推荐 pksolutions.com 的 Peter Miller。

标签: ms-access


【解决方案1】:

您需要转到http://support.microsoft.com 并搜索 JetComp.exe 实用程序,该实用程序将尝试在不打开文件的情况下修复和压缩您的 MDB。上述建议都不起作用的原因是因为他们必须打开 MDB 才能完成工作,而 JetComp 不会打开文件,而是在结构上对其进行操作。

如果它无法恢复您的文件(确实发生了这种情况),那么您将不得不使用数据恢复服务。我推荐 PKSolutions.com 的 Peter Miller。

【讨论】:

  • 不是答案,因为我想“以编程方式”做到这一点。
  • 那恐怕你倒霉了。
  • 顺便说一句,您知道您的用户需要非凡的工具来修复损坏的 MDB 的应用程序架构有什么问题?没有理由认为 MDB 会损坏(这是一个例外,而不是架构良好的应用程序中的规则)。也许你不应该使用 Jet,
【解决方案2】:

用于打开 .mdb 文件的命令行开关:

/compact

它修复并压缩数据库文件。

如果您在 /compact 开关后遗漏了目标文件名,则文件将压缩为原始名称和文件夹。要压缩为不同的名称,请指定目标文件。

【讨论】:

  • 对不起,我澄清了我的问题,以表明在未安装 MS Access 的机器上。
【解决方案3】:

您是否尝试过 DBEngine.RepairDatabase [my.mdb]? (即使您引用了早期版本,它似乎也不再起作用了)

但是,如果这种情况发生得如此频繁以至于您需要对其进行编码,那么您可能会遇到更大的问题,您应该首先解决。

如果您愿意使用单独的实用程序,Jetcomp.exe 实用程序(http://support.microsoft.com/kb/295334)怎么样。它应该“能够恢复 Microsoft Access 紧凑实用程序和 CompactDatabase 方法无法恢复的一些数据库”。在这种情况下,您需要做的就是执行外部应用程序。

例如,

Call Shell("Jetcomp.exe <arguments>")

【讨论】:

  • 但是请看,support.microsoft.com/kb/294966:PRB:RepairDatabase 方法在 DAO 3.6 中不再可用
  • 但是您尝试过 JetComp 吗?它与那篇文章中的问题无关,因为它是一个独立的可执行文件。
  • 顺便说一句,使用 Access97 SR2 从 Access 中删除了作为单独操作的修复,因为人们正在修复未损坏的 MDB 并且它正在破坏它们。从那时起,每个 COMPACT 操作首先检查 MDB 是否需要修复,如果需要则进行修复。因此,要修复,请执行契约。
  • JetComp 很好,但我不想运送 JetComp。我想将其功能构建到我的应用程序中。这就是我所说的“以编程方式”。
  • 那我觉得不可行。而且可能不值得你努力寻找一种方法——这真的应该是一个罕见的事件。添加有关如何修复损坏的数据库的常见问题解答。或者更好的是,在源头解决问题。切换到更可靠的免费数据库(MySQL、运行时 MS SQL 等)
【解决方案4】:

我不是 MS Acccess 专家,但似乎 this utility 包含压缩和修复损坏的数据库文件所需的 DLL。

【讨论】:

  • 我查看了源代码,它正在做我正在做的事情,调用 JRO.CompactDatabase。
猜你喜欢
  • 1970-01-01
  • 2010-10-21
  • 2011-11-23
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
相关资源
最近更新 更多