ADO和DAO之间的区别

时间:2012-03-16 12:18:55

标签: excel ms-access vba ado dao

这不是一个关于哪个更好的问题,而是一个关于它们在功能上有何不同的问题。我遇到的问题已经解决了,但我很好奇为什么会发生这种情况。

后台 - 使用Excel vba从Access数据库中提取数据。当用户单击按钮时,会从Access中提取记录集,并将各种数据填充到电子表格中。然后,从另一个查询中提取另一个记录集以填充电子表格的另一部分。

ADO做了什么 - ADO非常适合我的第一个记录集。但是,我的第二个记录集转到Access中的查询,运行,并且不返回任何行。如果我在Access中运行此查询,它会打开(大约3到4秒后)。此查询具有多个连接,计算项,限制以及可能的Union查询(我尝试了许多不同的方式,有/无联合等)。我尝试关闭并重新打开ado连接。我尝试更改超时值,我甚至测试使用ADO命令运行对此数据的Make表查询,然后从表中取出(这样做顺便说一句,但不是最好的情况,因为数据不断变化,每次有人使用此工具时,我都不想运行make table查询。)

所以,我把第二个数据拉到DAO,并且看,它有效。第一个数据拉取仍然是ADO(我通常更喜欢使用),但我现在正考虑将其更改为DAO,因为我宁愿在代码中使用一种数据访问方法。

那么,有人可以向我解释为什么ADO不会在一个案例中提取数据,但DAO会吗?同样,这纯粹是出于提供信息的目的。

3 个答案:

答案 0 :(得分:12)

DAO是Jet(Ms-Access)数据表的本机数据访问方法。 ADO“Active X Data Objects”是几乎所有类型数据库的行业友好连接。

使用标准查询,在这种情况下没有理由为什么ADO不应该返回DAO所做的记录,我怀疑查询还必须包含与Access数据库中的项有关的参数。如果是这种情况,那么ADO将无法工作,因为它不能选择使用所述参数,因为它只是Excel的外部引用,使用DAO方法将触发Access运行查询而不是Excel,因此它将能够访问它自己的参数/参考。

答案 1 :(得分:4)

我认为这个问题已经得到了很好的回答,但我想添加另一个优秀的(虽然有点难以找到)资源来比较DAO和ADO。它主要针对具有Access表单和报表的Access应用程序,但此处的大部分信息都适用于使用Excel编写的解决方案。

UtterAccess Wiki Article: Choosing between ADO and ADO

答案 2 :(得分:1)

在Visual Basic中,您可以使用三种数据访问接口:ActiveX数据对象(ADO),远程数据对象(RDO)和数据访问对象(DAO)。数据访问接口是表示访问数据的各个方面的对象模型。使用Visual Basic,您可以以编程方式控制连接,语句构建器和返回的数据,以便在任何应用程序中使用。

为什么Visual Basic中有三个数据访问接口?数据访问技术不断发展,三个接口中的每一个都代表了不同的技术水平。最新的是ADO,它具有比RDO或DAO更简单但更灵活的对象模型。对于新项目,您应该使用ADO作为数据访问接口。