ADO和DAO之间的区别
这不是一个关于哪个更好的问题,而是关于他们为什么在function上有所不同的问题。 我遇到的问题已经得到处理,但我很好奇为什么这种行为正在发生。
背景 – 使用Excel vba从Access数据库中提取数据。 当用户点击一个button时,一个logging集从Access中被取出,并将各种数据填充到电子表格中。 然后,从另一个查询中提取另一个logging集以填充电子表格的另一部分。
ADO做了什么 – ADO非常适合我的第一个logging集。 但是,我的第二个logging集在Access中查询,运行,并不返回任何行。 如果我在Access中运行这个查询,它会打开(大约3到4秒之后)。 这个查询有多个连接,计算项目,限制和可能的联盟查询(我尝试了很多不同的方式,有/没有联盟等)。 我试着closures并重新打开ado连接。 我试着改变超时值,我甚至使用ADO命令testing了对这个数据的表查询,然后从表中取出(这个工作的方式,但不是最好的情况,因为数据不断变化,而且我不希望每次有人使用此工具时都要运行make table查询)。
所以,我把第二个数据拉到DAO了,看哪,它的工作。 第一个数据是ADO(我通常更喜欢使用),但是现在考虑将其改为DAO,因为我宁愿在代码中使用一种数据访问方法。
那么,有人可以向我解释为什么ADO不会在一个情况下拉取数据,但DAO会? 再一次,这纯粹是为了信息的目的。
DAO是Jet(Ms-Access)数据表的本地数据访问方法。 ADO“活动X数据对象”是一种适用于几乎所有types数据库的行业友好连接。
使用标准查询,在这种情况下,没有理由为什么ADO应该不返回DAO所做的logging,我怀疑查询还必须包含与Access数据库中的项目有关的参数。 如果是这种情况,那么ADO将无法工作,因为它不会使用所述参数的选项,因为它只是Excel的外部参考,使用DAO方法将触发Access运行查询而不是Excel,因此它将能够访问它自己的参数/参考。
我认为这个问题已经得到了很好的回答,但是我想为DAO和ADO比较另外一个很好的(虽然有些难找)的资源。 它主要针对使用Access表单和报表的Access应用程序,但是这里的大部分信息将适用于使用Excel编写的解决scheme。
UtterAccess维基文章:selectADO和ADO
在Visual Basic中,可以使用三种数据访问接口:ActiveX数据对象(ADO),远程数据对象(RDO)和数据访问对象(DAO)。 数据访问接口是表示访问数据的各个方面的对象模型。 使用Visual Basic,可以以编程方式控制连接,语句构build器和返回的数据以供在任何应用程序中使用。
为什么在Visual Basic中有三个数据访问接口? 数据访问技术在不断发展,三个接口中的每一个都代表着不同的技术水平。 最新的是ADO,它具有比RDO或DAO更简单但更灵活的对象模型。 对于新项目,您应该使用ADO作为您的数据访问接口。