【问题标题】:Difference between ADO and DAOADO 和 DAO 的区别
【发布时间】:2012-04-01 23:40:13
【问题描述】:

这不是关于哪个更好的问题,而是关于为什么它们在功能上不同的问题。我遇到的问题已得到处理,但我很好奇为什么会发生这种行为。

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

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

所以,我将第二个数据拉取更改为 DAO,你瞧,它可以工作了。第一个数据拉取仍然是 ADO(我通常更喜欢使用),但现在正在考虑将其更改为 DAO,因为我宁愿在代码中有一个数据访问方法。

那么,有人可以向我解释为什么 ADO 不会在一种情况下提取数据,而 DAO 会吗?同样,这纯粹是为了提供信息。

【问题讨论】:

  • 如果没有看到您的代码就很难发表评论,但这可能是光标类型/记录集类型的问题。您是否依赖代码中的默认值?如果您只使用 Access,DAO 是更好的选择,因为它是 Access 原生的,并且比 ADO 提供更多控制
  • 你在哪里使用通配符?这是一个常见问题,对于 ADO,通配符是 %,而 DAO(通常)是 *.
  • @Remou,我很熟悉两者通配符的区别,但很遗憾我没有在查询中使用它们。
  • @Kyle,cursortype 是 adClient,recordset 是 adDynamic 和 asLockOptimistic(不完全确定,代码不在我面前)。我使用标准例程来设置我的所有记录集,因此所有查询都通过它。第一次跑,第二次没有,改为从桌子上拉,它工作。所以游标/记录集问题可能不是问题。

标签: excel ms-access vba ado dao


【解决方案1】:

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

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

【讨论】:

  • @Matt Donnan - 参数应该不是问题;两个查询都使用它们,在我将其更改为表后,它仍然使用它们。必须有其他的东西查询过程花费太长时间或其他东西。但是,我喜欢您的评论“使用 DAO 方法将触发 Access 运行查询而不是 Excel,因此它将能够访问它自己的参数/引用”。也许 ADO 正在让 Excel 尝试处理查询并且它在那里迷路了?
  • @creamyegg 和凯尔。我同意 DAO 可能是更好的选择,但我通常对 SQL Server 使用 ADO,再加上我的习惯很难改掉,而且大多数时候使用 ADO 都很好,直到遇到这样的问题:P 哦,好吧,需要根深蒂固我自己从现在开始使用 DAO(在这些类型的项目中)。
  • @APrough 是的,确认一下,ADO 将让 Excel 使用 Access 作为数据源运行查询,而 DAO 将让 Access 运行查询并将数据返回到 Excel。正如一些人所说,DAO 最适合 Access,而 ADO 是 MS SQL、Oracle、MySQL 等专用服务器的选择。
【解决方案2】:

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

UtterAccess Wiki Article: Choosing between ADO and ADO

【讨论】:

【解决方案3】:

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

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

【讨论】:

  • 所以 ADO 比 DAO 更现代。
猜你喜欢
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2014-10-05
  • 2010-11-08
  • 2013-09-04
相关资源
最近更新 更多