- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个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/
我正在尝试编写 Access Access 数据库的脚本,以便在命令行上使用。 Access 数据库使用工作组文件进行保护。 Dim oApp, sWGF,myWS Set sApp = Create
我有一个包含数据表的表格。我希望用户能够选择多行,单击按钮并运行一些 sql 查询并对这些行执行一些工作。 查看我的 VBA 代码,我发现如何使用 CurrentRecord 属性 Access 最后
如果我在某个网络位置有 Microsoft Access 2007 数据库,那么可以使用该数据库的客户端计算机的数量是否有限制?客户端不会安装 Access,而是使用 Access Runtime 2
我正在开发一个注册系统。但我收到此错误:You tried to execute a query that does not include the specified expression.. 我正
我有一个产品设计为使用 MS Access 文件作为数据库的桌面产品。 现在,一些用户需要将它安装在几台 PC(比如说 2 或 3 台)上并共享数据库。 我想将 MS Access 文件放在共享文件夹
我接手了一个旧的软件项目,该项目使用 MS Access 数据库来存储数据。但是数据库不会在 Access 中打开,如下所示: "You do not have the necessary permi
我有一个文件夹,里面装满了 100 多个 Access97 文件。我需要将它们全部更新到 Access2003。 我可以手动完成,但使用 VBA 可能会快很多。 有没有人会有一个片段可以做到这一点?或
我正在通过 SQL Server 迁移助手 (SSMA) 将数据从 Access 数据库迁移到 SQL Server。 Access 应用程序将继续与转换为链接表的本地表一起使用。 一个连续的表单在加
我正在通过 SQL Server 迁移助手 (SSMA) 将数据从 Access 数据库迁移到 SQL Server。 Access 应用程序将继续与转换为链接表的本地表一起使用。 一个连续的表单在加
我的公司用 Visual Basic 6 开发了一个应用程序。 该应用程序通过 ODBC 数据源使用 Access 数据库。 Access 数据库是一个扩展名为“.mdb”的文件。 在以下环境中运行应
我一直在尝试让 Microsoft Access 从主 Access 窗口中“退出”,以便我可以隐藏 Access 窗口并仅在桌面上显示表单,以便可以轻松地将其放置在其他应用程序旁边。 起初我发现了一
我想在 access 2010 中使用 access 2000 和 2003 数据库。由于我不想检查一切是否手动工作,我正在寻找一种工具来分析 VBA 代码以查找使用 access 2010 发生的错
所以我有一个 Excel 工作簿,其中有一个很好的 shaperange 对象的全局 map 。通过一些非常简单的代码,我可以更改颜色、将国家/地区集合分组和取消分组为数组等......并且效果非常好
我们希望有大约 35-40 人通过共享驱动器上的脚本写入 Access 数据库。这些指标分解为他们需要每小时写大约 3-7 次。 Access 会支持这一点而不会对我产生影响吗? 是的,我很乐意将其用
我正在寻找一种使用 VBA 代码从外部数据库文件中删除 VBA 模块的方法。名为“myfile.accdb”的外部文件有一个名为“mod1”的模块,我希望能够在单独的项目中使用 VBA 代码删除该模块
我在 Access 2003 数据库(在 Access 2007 中开发)中有三个表单,它们处于父级 -> 子级 -> 孙子级关系中。在子窗体的 'Form_Load' 子窗体中,我设置了孙子窗体的一
MS Access 2007 存在拒绝在设计模式下显示表单的问题。我可以看到表单的代码(如果我查看显示表单的按钮的事件属性),但我看不到作为 GUI 布局的表单。而且,当我尝试从应用程序的主窗口调用此
我编写了代码,使用 Excel 中的下拉列表提供的标准将两个表连接起来,然后将数据返回到电子表格上的特定位置(工作表上已经有标题)。 这在我的机器上和其他机器上使用 MS Access 的机器上都可以
我正在开始构建一个应用程序,该应用程序从给定的根路径开始遍历文件夹结构,并将所有找到的 Access 1997 .mdb 文件转换为较新的 Access 2007/2010 .accdb 格式。但是,
我有一个表单和一个按钮。我想通过单击按钮打开另一个表单,并将参数从父表单传递到子表单(子表单的 RecordSource 有参数)。我该怎么做? 最佳答案 您可以通过引用表单的对象来引用调用表单的任何
我是一名优秀的程序员,十分优秀!