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

And*_*lli 20 ms-access vba ms-access-2007

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

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

one*_*hen 15

[为了记录,曾经'Jet'的官方名称现在是'Access数据库引擎'.

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

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

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

我已经使用了很多,ADO是我个人的偏好.它比DAO更现代,所以在架构上它是一种改进:更平坦的对象模型,没有DAO的拆卸问题等.更多属性和方法并引入事件(DAO没有),例如用于异步连接和记录的提取.ADO记录集可以断开,分层和伪造,DAO记录集不能.基本上,他们采取了DAO的好处,并使他们更好.

DAO并非没有优点.首先,您将找到比ADO for Access/Jet更多的DAO代码示例.

PS由于某种原因,喜欢DAO的人真的不喜欢ADO.忽略宣传.ADO不会被弃用.ACE具有OLE DB提供程序,是目前在64位中使用ACE的唯一方法.ADO.NET并没有取代ADO经典,而是VB.NET已经取代了Access项目中的VBA6.

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

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
                      ))
);
Run Code Online (Sandbox Code Playgroud)

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

AFAIK对ACEDAO的唯一增强是针对新的ACE功能,即他们没有返回并填写DAO中的Jet 4.0空白.他们为什么要这样?我们仍然有ADO来弥补差距.更好的是,团队更有成效地花时间,比如修复那个讨厌的DECIMAL排序错误,对我来说ACE最好的事情;-)


Alb*_*lal 8

DAO是这里推荐的技术.ADO已被大量折旧,现在正在被ADO.net取代.

DAO不仅是使用MS访问的本机和推荐数据对象模型,它还在不断增强,现在拥有一大堆用于sharepoint的新功能.在Access 2007中,我们现在拥有对SharePoint列表的支持.这意味着2007的新DAO对象模型允许使用sharepoint列表并将其视为SQL Server表.这意味着您可以在sharepoint列表上使用SQL(在那里甚至没有允许您以这种方式使用SharePoint列表的oleDB提供程序,但是使用DAO,您现在可以执行此操作).ADO中没有添加任何此类内容.因此,从访问(dao)角度来看,SharePoint列表将这些SharePoint列表视为标准表.

此外,访问中的DAO还支持我们称之为复杂数据类型的东西.这样做是为了支持来自sharepoint的XML列表.请记住,对于下一版本的访问(2010),我们将看到更多新的附加功能被添加到DAO(JET现在称为ACE).

毫无疑问,DAO是正确且好的模型.ADO没有收到任何更多增强功能,并且已被ADO.NET取代.

因此,未来属于DAO,而且很明显,微软在MS访问和升级条款方面投入了大量资金.

Access 2007为其字段定义提供了多值功能,这也是支持sharepoint的增强功能的结果.但是,这些功能是JET的一部分,这些增强功能可以在没有sharepoint的情况下使用.他们现在是DAO的一部分.


编辑:也许我会稍微扩展一下这一点,并尝试澄清我们在这里有这样的对立答案,我可以向你保证,在使用Access 2007时,你最好使用DAO.

如果您选择使用默认数据对象模型访问2007,如果您查看工具引用,那么这里的问题就是它不再被称为DAO.它现在被称为ACE.

在访问2007中使用DAO时您将在工具参考中注意到,引用未设置为DAO 3.6(该版本已被折旧,现在也不再是MDAC下载的一部分).您会注意到在ms-access中使用DAO时的新引用被调用:

Microsoft Office 12.0访问数据库引擎对象库

现在上面有点满口,但是当你打算用DAO代替ADO时,上面的参考访问权限是正确的.

换句话说,也许我们应该称之为DAO II.

换句话说,这个数据引擎继续得到增强,并且最有可能看到办公室2010(办公室14)的这个引擎的64位版本.

因此,当我们提到在访问2007中使用DAO时,问题或混淆的中心是什么术语.这里的混淆实际上是文档甚至工具 - >引用并不称之为DAO.

在访问2007年的一天结束时,如果您打算使用DAO,那么这意味着您设置了上述引用,并且不设置对DAO 3.6的引用.无论如何,当它被折旧时开始使用ADO是完全没有意义的,并且用于访问的新DAO对象模型继续得到Microsoft的增强和投资.

我希望这有助于消除这里的混乱.虽然DAO/JET正在被折旧,但新版本访问2007基于相同的代码库,除了它继续得到增强.因此可以考虑访问中的新数据引擎并将其称为新的DAO对象模型.

我目前正处于这个问题的NDA,但我可以肯定地告诉你,对于下一个版本的办公室(2010年),我们将再次看到一大堆增强功能.

所以Access开发人员几乎一致认为,在开发访问应用程序和使用本机数据引擎时,这里的首选是使用DAO对象模型(但请记住,我们不再称之为它,我们称之为ACE).

  • 当Access团队花时间将所有Jet 4.0功能实现到ACEDAO中时,ADO将被替换为Access数据引擎(ACEDAO是否支持行级锁定?)当Access团队花时间实现所有ADO对象时'功能(断开异步获取分层记录集和所有Jazz)然后ADO将被ACEDAO取代.当(??)团队使ADO.NET在VBA中工作时,ADO.NET将取代ADO.在此之前,ADO仍然需要完全在Access世界中提供全部功能. (2认同)