wes*_*oth 2 ms-access dao ado access-vba ms-access-2010
我正在制作一个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为我提供了更多选项和更多控制权,尽管它确实带来了它的成本.我使用了大量断开连接的记录集,然后我"手动"(VBA)只有在用户单击保存按钮时才将更改写回数据库.这使用户可以选择对表单及其子表单进行一系列更改,但如果他选择则仍然取消.使用断开连接的ADO记录集,您可以决定如何将数据更改到服务器,尽管非断开连接的记录集会自动提交更改.尽可能接近,唯一一个自动从服务器(adOpenDynamic)接收所有添加,更改和删除的ADO记录集类型不能绑定到表单,但如果您只是希望能够这样做,那真的不是一个大问题使用ADO绑定表单添加/编辑/删除记录.
我已经阅读了很多地方,ADO与DAO相比没有任何性能优势,在某些情况下可能实际上更慢.我不能说这种或那种方式,但我认为这不是一个大问题.ADO的优势在于,您实际上可以使您的应用程序在缓慢和/或不稳定的网络连接(例如WAN/Internet)上工作,这对于DAO/ODBC来说实际上是不可行的.使用纯ADO解决方案,您负责处理连接对象和所有数据提取.您可以设置连接和命令超时,如果发生超时,连接失败等,由您决定如何处理它.例如,您可以进行X次重新连接尝试.在DAO/ODBC中,这一切都不可能.据我所知,连接对象甚至没有用ODBC公开,除了你可以设置ODBC连接字符串.
在ADO中执行所有操作需要更多代码,特别是如果要使用断开连接的记录集.必须使用代码获取(或制作)记录集.如果使用断开连接的记录集,则必须使用代码将数据写回服务器.无论您使用断开连接还是已连接的记录集,表单上的主/子关系都必须使用代码手动管理(您不能使用主/子链接属性).
ADO的一个潜在缺点是无法将报告绑定到ADO记录集,除非您使用的是访问数据项目,此时此时并未真正推荐,因为MS正在放弃对ADP的支持.如果要在报表上使用DAO之外的其他内容,则必须使用"通过查询",如果数据存储是MS Access,则执行该操作是没有意义的.
我认为关于绑定和未绑定表单的任何讨论都与任何有关DAO和ADO的讨论完全无关.表单可以绑定到ADO Recordset,只需很少的权衡.未绑定的表单可以从DAO Recordset或ADO Recordset获取它的数据,并且没有区别,因此未绑定的表单和ADO与DAO和未绑定的表单之间不会相互关联或不相关.我真的只使用未绑定的表单来创建我自己的消息框和某些类型的输入框或记录选择框.通常情况下,我希望在触摸屏应用程序的按钮上显示数据然后我不受约束.如果我可以从Textboxes获得类似的行为(如果我足够努力的话,我可能会这样做),很少有情况需要一个未绑定的表单.
在我看来,有一个想法传播,未绑定的表单是真正的专业人士开发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条记录).
在UtterAccess Wiki上有一篇相当广泛的文章,详细介绍了DAO与ADO的优缺点(请注意,该文章已被删除,查看它的唯一方法是查看历史记录.一定要确保向下滚动差异/比较).还有另一篇关于在JuanExoto撰写的AccessExperts.com上未绑定表格的精彩文章.
| 归档时间: |
|
| 查看次数: |
2821 次 |
| 最近记录: |