在 Access 2007 中使用 ADO 或 DAO 哪个更好?

2024-04-24

在Access 2007中创建新数据库时,应该使用ADO(ActiveX数据对象)还是DAO(数据访问对象)?

编辑:该数据库的一部分将从 Excel 2007 电子表格导入数据。


[郑重声明,曾经的“Jet”的正式名称现在是“Access 数据库引擎”。]

对于 ACE(Access2007 引擎 .accdb 格式)功能,它必须是 ACEDAO。

对于 Jet 4.0 功能,它必须是 ADO 经典。

对于 Jet 3.51 及更早版本的功能,请选择 ADO 或 DAO。两者都有优点和缺点。 Access 数据库引擎的绝大多数功能对于两者都是通用的;相互排斥的功能是有争议的边缘。也许是一种生活方式的选择,但没什么大不了的。聪明的编码员充分利用了两者的优点:)

我已经用过很多次了,ADO 是我个人的偏好。它比 DAO 更现代,因此在架构上它是一种改进:更扁平的对象模型,没有 DAO 的拆卸问题等。更多的属性和方法并引入了事件(DAO 没有),例如用于异步连接和获取记录。 ADO 记录集可以断开连接、分层和构造,而 DAO 记录集则不能。基本上,他们吸收了 DAO 的优点并使其变得更好。

DAO 并非没有优点。其一,对于 Access/Jet,您会发现比 ADO 更多的 DAO 代码示例。

附:出于某种原因,喜欢 DAO 的人确实不喜欢 ADO。忽略宣传。 ADO 并未被弃用。 ACE 有一个 OLE DB 提供程序,并且是目前在 64 位中使用 ACE 的唯一方法。 ADO.NET 没有取代 ADO classic,就像 VB.NET 没有取代 Access 项目中的 VBA6 一样。

编辑:只是澄清一下,“对于 Jet 4.0 功能,它必须是 ADO 经典”,这是因为 DAO 3.6 仅对 Jet 4.0 的新功能进行了一些增强。例如,对于DECIMAL您无法指定比例/精度的数据类型。 DAO 完全缺少其他功能。例如,您可以在 Jet 4.0 中使用 DAO(或 ACE 中的 ACEDAO)执行以下操作吗?

CREATE TABLE Test (
   col1 CHAR(4) WITH COMPRESSION DEFAULT '0000' NOT NULL, 
   CHECK (NOT EXISTS (
                      SELECT T1.col1 
                        FROM Test AS T1 
                        WHERE T1.col1 <> '0000' 
                        GROUP 
                           BY T1.col1 
                       HAVING COUNT(*) > 1
                      ))
);

(提示:具有表级数据完整性约束的可压缩固定宽度文本列。)不,你不能。

AFAIK 对 ACEDAO 的唯一增强是针对新的 ACE 功能,即它们没有回去填补 DAO 中的 Jet 4.0 空白。为什么他们应该这样做?我们仍然有 ADO 来填补空白。更好的是团队更高效地利用时间,比如解决那个烦人的问题DECIMAL排序错误,对我来说 ACE 最好的事情;-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Access 2007 中使用 ADO 或 DAO 哪个更好? 的相关文章

随机推荐