2012-03-16 90 views
14

这不是一个关于哪个更好的问题,而是关于它们为什么在功能上有所不同的问题。我遇到的问题已经解决,但我很好奇为什么会发生这种行为。ADO和DAO之间的区别

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

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

所以,我改变了第二个数据拉到DAO,你看,它的工作原理。第一个数据是ADO(我通常更喜欢使用),但现在考虑将其更改为DAO,因为我宁愿在代码中使用一种数据访问方法。

那么,有人可以向我解释为什么ADO不会在一个情况下拉数据,但DAO会?再次,这纯粹是为了信息的目的。

+1

在看不到代码的情况下很难评论,但它可能是cusrsor类型/记录集类型问题。你是否依赖代码中的默认值?如果您只使用Access,那么DAO是一个更好的选择,因为它是Access原生的,并提供比ADO更多的控制 – SWa 2012-03-16 12:31:11

+2

在哪里使用通配符?这是一个常见问题,对于ADO而言,通配符是%,而DAO是(通常)*。 – Fionnuala 2012-03-16 13:49:17

+0

@Remou,我很熟悉两者之间通配符的区别,但不幸的是我不在查询中使用它们。 – APrough 2012-03-16 14:33:32

回答

11

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

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

+1

+1 DAO是比ADO更好的选择Access – SWa 2012-03-16 13:32:05

+0

@Matt Donnan - 参数不应该是一个问题;这两个查询都使用它们,在我将它更改为表格后,它仍然使用它们。查询过程需要很长时间或其他情况时,必须有其他内容。但是,我喜欢你的评论“使用DAO方法将触发Access运行查询而不是Excel,因此它将能够访问它自己的参数/引用”。也许ADO有Excel试图处理查询,它在那里迷路了? – APrough 2012-03-16 14:39:07

+0

@creamyegg和凯尔。我同意DAO可能是更好的选择,但我通常对SQL Server使用ADO,加上我的习惯很难,在大多数情况下使用ADO都没有问题,直到遇到像这样的问题:P哦,需要根深蒂固我从现在开始使用DAO(在这些类型的项目中)。 – APrough 2012-03-16 14:45:15

3

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

UtterAccess Wiki Article: Choosing between ADO and ADO

1

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

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

+0

阅读ADO不再处于积极发展状态 链接:http://www.utteraccess.com/维基/的index.php/Choosing_between_DAO_and_ADO – 2016-02-29 06:37:21