gpt4 book ai didi

ms-access - 在Access应用程序中混合ADO和DAO

转载 作者:行者123 更新时间:2023-12-01 15:24:28 27 4
gpt4 key购买 nike

我正在制作一个Access应用程序,它将专门使用Jet(无SQL Server),并拆分为前端后端体系结构。我权衡了绑定/未绑定的利弊,但在这种情况下仍想追求绑定。

我有几个依赖于ADO记录集的类和模块将被导入到这个项目中。但是,我已经阅读了一些建议,建议使用DAO填充Access表单http://support.microsoft.com/kb/281998 {Microsoft Jet的要求}。我知道这些是完全不同的库,并且无法彼此共享信息。但是,我在想我的类和其他ADO依赖对象可以混合使用本地表/查询和表单控制值,以避免潜在的冲突。

因此,我的问题是:如果仅我们DAO来填写此项目中的表格,我是否还在麻烦您?如果是这样,我应该注意哪些问题?或者,如果我小心的话,可以期望这种分隔可以并存,并且在应用程序文档中说明了这种区别是否合理?

最佳答案

在同一应用程序中混合DAO和ADO并不会带来任何问题或复杂性。我认为您的问题确实与何时何地使用一个或另一个有关。

我在Access开发中的标准策略是仅在DAO无法完成我想做的事情时才使用ADO。例如,使用ADO可以访问Access以外的数据存储,例如Visual Foxpro,Oracle,MySQL等。但是,也不一定总是需要ADO来实现,因为您通常可以使用ODBC来代替,这意味着您将使用DAO与ODBC链接表一起。

最近,我在某些方面切换到了我更喜欢只使用ADO的地方,但是我认识到这在许多有经验的Access开发人员中并不常见。我正在使用SQL Server 2008/2012 Express和绑定到ADO记录集的表单,并且完全避免使用任何ODBC链接表。我的基本原因是,尽管ADO附带了成本,但ADO给了我更多选择和更多控制。我使用了许多断开连接的记录集,然后仅当用户单击“保存”按钮时,才“手动”(VBA)将更改写回到数据库。这使用户可以选择对表单及其子表单进行大量更改,但是如果他选择的话仍然可以取消。对于断开连接的ADO记录集,由您决定如何将数据更改获取到服务器,尽管未断开连接的记录集会自动提交其更改。据我所知,唯一的ADO记录集类型可以自动接收服务器(adOpenDynamic)cannot be bound to a form的所有添加,更改和删除,但是如果您只想使用ADO绑定的表单,那么这并不是一个大问题。添加/编辑/删除记录。

我已经读过很多地方,ADO与DAO相比没有任何性能优势,而且在某些情况下实际上可能更慢。我不能说一种方式,但是我认为这不是一个大问题。 ADO具有的优点是,您实际上可以使应用程序在慢速和/或不稳定的网络连接(例如WAN / Internet)上工作,而这在DAO / ODBC中实际上是不可行的。使用纯ADO解决方案,您将负责处理连接对象和所有数据提取。您可以设置连接和命令超时,如果发生超时,连接失败等,则由您自己决定如何处理。例如,您可以进行X次重新连接尝试。在DAO / ODBC中,这实际上是不可能的。据我所知,除了可以设置ODBC连接字符串的事实外,连接对象甚至都没有用ODBC公开。

在ADO中执行所有操作确实需要更多代码,尤其是如果您要使用断开的记录集。记录集必须使用代码来获取(或伪造)。如果使用断开的记录集,则必须使用代码将数据写回到服务器。无论您使用断开的记录集还是连接的记录集,都必须使用代码手动管理表单上的主/子关系(不能使用“主/子链接”属性)。

ADO的一个潜在缺点是,除非您使用的是Access Data Project,否则不可能将报表绑定到ADO记录集,但鉴于MS放弃了对ADP的支持,因此目前不建议这样做。如果要对报表上的数据使用DAO以外的其他内容,则必须使用“通过查询”,并且如果数据存储区是MS Access,则这样做是没有意义的。

我认为任何有关绑定和非绑定形式的讨论都与有关DAO和ADO的讨论完全无关。可以以很少的权衡将窗体绑定到ADO Recordsets。一个未绑定的表单可以从DAO记录集或ADO记录集中获取其数据,并且没有区别,因此未绑定的表单和ADO不再与DAO和未绑定的表单相关或不相关。我实际上只使用未绑定的表单来创建自己的消息框和某些类型的输入框或记录选择框。通常,在这种情况下,我希望数据显示在触摸屏应用程序的按钮上,然后再进行绑定。如果我可以从“文本框”中得到类似的行为(并且如果我足够努力的话,我可能可以做到),那么在少数情况下,必须使用未绑定的表单。

在我看来,已经传播了一个想法,即无约束形式是真正的专业人员开发Access应用程序的方式。或者,未绑定的表单是获得性能的唯一途径。或者,如果您不使用MS Access作为数据存储,则应使用未绑定的表格。但是这些想法都没有经过任何审查。将表单绑定到ADO记录集比完全解除绑定要容易得多。而且甚至不可能以无约束的方式使用数据表视图或连续表格。如果您确实想在网格样式的视图中脱钩,则必须使用ActiveX网格控件,例如10tec的iGrid或MS List View控件,这些控件通常开销较大,因为需要一些时间来获取记录以及用数据填充网格控件所需的额外时间。未绑定的表单没有性能提升,我可以想到将表单与ADO记录集绑定在一起。而且,即使您必须使用伪造的ADO记录集,也确实没有任何一种数据存储不能使用ADO Recordset。

这是一个极大的简化,但是您在MS Access中的主要性能提升来自最大化数据存储的性能(通常意味着迁移到SQL Server)并仔细管理您加载并提供给用户的数据量。后者最简单的方法是使用ADO,但是您也可以使用DAO / ODBC。 ODBC实际上比ADO有一个优势,即延迟加载。您可以将数据表表单或连续子表单绑定到非常大的表/ DAO记录集,并且在滚动时会加载每个记录。它是我不太喜欢的功能,我已经引起用户的抱怨,因为在释放滚动条之前您看不到记录,但是我不得不说这是最重要的功能之一处理大量数据(> 50,000条记录)的有效方法。

有一个相当广泛的article on the UtterAccess Wiki that details the pros and cons of DAO versus ADO(请注意,该文章已被删除,查看它的唯一方法是查看一次历史记录。只需确保在diff / comparison下滚动即可)。还有另一个great article on unbound forms at AccessExperts.com written by Juan Soto

关于ms-access - 在Access应用程序中混合ADO和DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18576154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com