MS访问Treeview控件加载缓慢,我需要使用ADO而不是DAO吗?

Posted

技术标签:

【中文标题】MS访问Treeview控件加载缓慢,我需要使用ADO而不是DAO吗?【英文标题】:MS access Treeview Control slow to load, do I need to use ADO instead of DAO? 【发布时间】:2016-02-11 10:24:33 【问题描述】:

我有一个 activeX 树视图控件,它有 4 级节点(子节点),每个节点都与存储在数据库后端(内部服务器)上的单独表相关。使此树视图工作需要 3 个查询和 4 个 dlookup。

随着数据库开始变得高度填充,带有树视图控件的表单加载速度变慢(10 秒)。我想加快这个加载时间,我认为转换为 ADO 是我至少需要考虑的事情。

这是唯一真正加载如此大量数据的表单,如它的 4 个表,我想我可能需要将查询记录集转换为 ADO?

我不太了解 ADO 或它最适合的应用,但由于我使用的是 activeX 控件,它可能最适合吗?我只在此表单上使用了DAO.recordset,因为可用的各种参考 VBA 都使用它。

ADO 是否更适合这种情况?

使用 ADO 会加快表单的加载时间吗?

将 VBA 中使用的记录集转换为 ADO 是否复杂?

注意:我不完全确定如何将我的 VBA 代码转换为 ADO 记录集,但如果它不合适,我不会费心去学习它

【问题讨论】:

我们在谈论多少数据?您是否确认延迟是由于渲染而不是查询时间?树视图的好处是您可以选择仅在节点展开时按需加载数据。 1 级:24 条记录.... L2:10.... L3:260 ...... L4:900。随着时间的推移,底层会变得相当大。如何“仅在单击时加载”或查看是否已应用? 转换为 ADO 不会给您带来显着的性能优势(甚至可能相反)。作为 ActiveX 对象的 Treeview 控件与加载记录的方式无关。 @Andre 我会先研究和尝试,看看我自己能走多远。 我完全同意@Andre ADO 或 DAO 不是问题所在。首先尝试使用内部表,然后查看加载树所需的时间。加载树时,您可以加载级别 1 到 3 中的所有节点,然后在 node_click() 事件中使用加载级别 4 节点时使用的相同代码添加或刷新级别 4 子节点。 【参考方案1】:

快速加载树视图的“技巧”是双重的

a) 您应该保存/计算“层数”(0 = 地面层, 1等),以便您在使用时可以方便地使用级别编号 加载,这样您就可以一步加载整个树,而无需 递归搜索。我个人总是有一个单独的本地 包含所有内容的树视图表,尤其是 等级号

b) 在加载到数组之前加载表信息并从 那里。最好的问候克劳斯

【讨论】:

以上是关于MS访问Treeview控件加载缓慢,我需要使用ADO而不是DAO吗?的主要内容,如果未能解决你的问题,请参考以下文章

循环访问 TreeView 控件的所有节点

ListView 控件加载非常缓慢

ASP.NET中使用TreeView控件

Delphi下Treeview控件基于节点编号的访问

Delphi下Treeview控件基于节点编号的访问

访问 VBA - TreeView 控件 - AfterLabelEdit 事件