【发布时间】: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