gpt4 book ai didi

由 ADO(来自 VBA)创建的数据库在 MS Access 中打开后减小了文件大小。为什么?

转载 作者:搜寻专家 更新时间:2023-10-30 23:00:52 24 4
gpt4 key购买 nike

我目前正在学习如何使用 VBA 中的 ADO(从 Excel 运行)创建数据库和表格。我能够创建格式为 .mdb(使用连接“Microsoft.Jet.OLEDB.4.0;”)或 .accdb(使用连接“Microsoft.Ace.OLEDB.12.0;”)的数据库 - 我能够创建表并插入记录。到目前为止一切顺利。

但是我注意到,在我通过 ADO 创建这样一个数据库之后,如果我在 MS Access 中打开它,文件大小会显着减小。注意:只有在 Access 中打开它的 Action 才有这个效果。我不会对那里的数据进行任何更改。

举个例子:ADO新建的数据库是1304k;然后在Access中打开后是816k。

据我所知,在 Access 中打开时没有数据丢失。我只能猜测 Access 在打开时会以某种方式自动优化数据库,或者以其他方式删除由 ADO 插入的不必要的内容。显然,我希望文件大小尽可能小。所以我想知道:

1) 有谁知道这里发生了什么?

2) 如果 ADO 插入了不必要的数据,我有什么办法可以通过编程对其进行优化吗?我的最终用户将只运行 Excel,所以我不能要求他们定期在 Access 中打开数据库来优化数据。

最佳答案

不知 Prop 体如何创建表、导入记录、结构和模式;或您的环境 2000/02/03 mdb 或 2007/10/13 accdb 版本、机器(32 位/64 位、笔记本电脑/台式机)、Windows 操作系统(XP、Vista、7、8、10)、单 CPU 或局域网,只能推测。

首先重要的是要了解奇怪的、难以定义的程序,即 MS Access .本质上,MS Access 是一套相互连接的对象:Jet/ACE SQL 引擎、GUI 前端应用程序、报告生成器和 IDE 编码接口(interface)。它实际上不是数据库,但默认情况下附带 ACE 引擎,顺便说一下,它不限于 MS Access,而是完全适用于所有 Office 和其他 PC 应用程序的 Windows 技术(.dll 文件)。 Excel 甚至可以在没有安装 Access 的情况下运行 accdb/mdb 文件!当与其他数据库(例如另一个文件服务器(流行的、开源的)对应物 SQLite 和客户端服务器(SQL Server、MySQL、PostgreSQL))相比时,它实际上是 Jet/ACE 组件,它是被比较的关系引擎。有趣的是,Access 可以通过关闭其默认设置来连接到所有上述 RDBMS。

话虽如此,MS Access 的多面性在 SQL 后端引擎和 VBA 前端都使用了临时对象,与硬盘和内存交互,尤其是在导入记录和各种查询时。甚至 MSN 网站在其 Compact and repair 中也提到了它页。

Access creates temporary, hidden objects to accomplish various tasks. Sometimes, these temporary objects remain in your database after Access no longer needs them.

此外,生成表和操作查询(附加/更新/删除)实际上在提交最终更改之前复制了整个结果集。因此,系统会提示用户在更改完成之前添加的记录数,并有机会回滚操作。因此在迁移数据后,您的数据库可能会略微恢复到以前的状态。然后,有 garbage collection in VBA当对象不再使用并且 OLEDB 驱动程序中断连接时释放内存。您可能会看到文件大小有所不同,因为在您的 VBA 处理完成并超出范围后恢复了一些空间。我想知道您在什么情况下查看了较大的 Access 文件?刷新的 Windows 资源管理器或 CPU 重启会改变 View 吗?您是否阅读了文件属性(通过右键单击)或资源管理器的详细信息部分,它们的近似值不同?您是否看到其他文件大小发生变化,例如 Excel 工作簿?这是经常发生还是异常?

管理数据库创建过程 purely in code可能是使用数据库而不是使用 Access 的图形用户界面的最有效方式,因为多用户访问锁定和应用程序对象会增加一些开销。

总而言之,ADO 不太可能在您不具备开发知识的情况下添加任何数据或组件。定期,decompile, compact ,并显式删除 VBA 对象(即 set obj = Nothing)。查看有帮助 performance tips .此外,不要过分关注文件大小,而是性能和完整性,因为在应用程序的整个过程中,文件大小将是一个波动的指标。最后一点,尽管 Excel 非常流行且易于使用,如 MS Access 强大的 native 组件所述,请考虑在 Access 中开发您的最终使用需求(免费 runtimes 可通过 Microsoft 获得,允许使用,因为 Jet 是一种 Windows 技术).在各个方面,Access 都提供了更稳定的多用户应用程序和自动化环境。

关于由 ADO(来自 VBA)创建的数据库在 MS Access 中打开后减小了文件大小。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com