经常压缩和修复 Access DB 是不是安全?

Posted

技术标签:

【中文标题】经常压缩和修复 Access DB 是不是安全?【英文标题】:Is it safe to frequently Compact and Repair Access DB?经常压缩和修复 Access DB 是否安全? 【发布时间】:2017-07-04 03:29:25 【问题描述】:

我有一个使用直通查询填充的 Access 数据库。 我从 SQL 数据库中获取特定数据并将其转储到 Access 上。 此 Access 数据库每周更新一次,但我不能简单地附加前一周的新数据,因为过去的所有其他周也会更新。

我所做的是截断 Access DB,然后再次加载所有内容。 当我这样做时,我需要压缩和修复数据库,以免大小膨胀。

我的问题是,这样做可以吗?目前我正在使用answer中发布的逻辑。 我还没有遇到任何问题,但我只是想确保并让我们的访问大师考虑一下。此外,我还计划在我们的服务器上进行计划运行以完成任务。 只需要确保它不会轻易损坏(首先损坏文件的可能性是多少?)。

如果你会问,我为什么需要这样做?数据用户无法访问 SQL 服务器。所以我必须为他们提取数据,以便他们可以连接到 Access DB。

以防万一您需要代码:

Dim sqlDelete As String
Dim sqlAppend As String

sqlDelete = "DELETE * FROM dbo_Table;"

sqlAppend = "INSERT INTO dbo_Table (Col1,Col2) SELECT Col1,Col2 FROM passThrough;"

With DoCmd
    .SetWarnings False
    .RunSQL sqlDelete

    .RunSQL sqlAppend
    .SetWarnings True
End With

Application.SetOption "Auto Compact", True

【问题讨论】:

我在定期做一些名称中包含 Repair 的事情时会遇到问题,因为它具有真正的负面含义(为什么你需要修复某些东西,除非它是坏了)。为什么您的用户没有 SQL Server 的 SELECT 功能? @KenWhite Why don't your users have SELECT capabilities for SQL Server? 我也问了同样的问题。但是,我认为这与网络流量和工作范围(由公司指示)有关。服务器也在地球的一半。 【参考方案1】:

如果您需要截断数据并再次加载,我建议将所有应该截断的表和所有临时表移动到单独的数据库中。 分离后,可以在应用程序启动时通过空数据库文件用不必要的数据替换该数据库。只需保存空数据库的副本并将此文件复制到具有旧数据的现有数据库即可。这应该在基于临时数据库中的表打开任何表单/记录集之前完成。它每次都比 C&R 运行得更快且更可靠,因为有时 C&R 可能会损坏文件。

模板数据库文件也可以存储在Memo字段的主数据库中

【讨论】:

我想我明白了你的意思,但仍在处理它的一半。介意再详细说明你的答案吗? :) 我会这样做的。 我编辑了一点答案,如果您需要更多解释,请告诉我。 哦!这是非常简单和整洁的。那我就去试试吧。 我已经实现了这个,它工作正常。虽然你的回答没有直接回答我的问题,但我会接受你的帖子,直到另一个答案出现。【参考方案2】:

我会参考这个论坛帖子:http://www.utteraccess.com/forum/index.php?showtopic=1561733

【讨论】:

以上是关于经常压缩和修复 Access DB 是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 3 压缩和修复 Access 数据库

在压缩/修复期间防止自动编号重置 (MS Access)

以编程方式访问“压缩和修复”

通过压缩和修复从 Cassandra db 中删除大量数据后,磁盘空间未更改

为啥access数据表中有一条记录不能修改

使用 VB.net 创建 Access 07 DB 在第一次打开时总是运行修复