gpt4 book ai didi

delphi - 同时在多个控件之间共享一个 TDataSource 是否安全?

转载 作者:行者123 更新时间:2023-12-03 18:25:41 25 4
gpt4 key购买 nike

我已经在我的应用程序的主 DataModule 中移动了所有查找表/查询。现在我想知道我是否也可以移动相关的TDataSource到数据模块。

例如,如果我有两个 TLookupCombobox在两个不同的表格上(甚至在同一个表格上)使用相同的 TDataSource ,这会有影响吗?就像我在 中选择一个项目时一样组合框1 它会移动到 上的同一项目吗?组合框2 ?

我只想用这些TDataSources只读。

最佳答案

是的,可以将 TDataSource 放置在 TDataModule 中并用作许多表单上的 db-aware 组件的数据源。但是,这通常不是一个好主意,您可能会后悔。这样做会给自己带来维护问题,因为对其属性进行一些更改太容易了,这会影响 db-aware 组件的行为方式并忽略各种形式的链式后果(对于 TDataSet 后代也是如此,当然)。

如果表单的实例同时存在,跨表单共享数据源可能会影响性能,如果您执行一些迭代数据集中记录的过程尤其如此(除非您使用对 TDataSet.DisableControls 的调用围绕操作和.EnableControls)。

所以 imo 虽然将数据集放置在由多个表单使用的数据模块中是有好处的,但将数据源放置在包含连接的 db-aware 组件的表单上要好得多。

就 db-aware 复合控件如 TDBComboBox、TDBListBox 等而言,这些 总是 显示相关数据集中当前记录的值。再多的编码都不允许这些组件在不同的表单上同时显示不同的字段值:如果它们由来自同一记录字段的同一数据源提供,它们将显示相同的值(当然,关联列表的内容在控件,如 DBComboBox 的下拉列表中的控件,它们之间可能不同)。这源于 TDataSet 被设计为操作的方式:它们都实现了一个数据集“光标”,这使得所有数据读取和写入操作都对数据集的单个“当前”记录和数据集字段的值进行操作db-aware 组件显示的是光标所在记录中的值。

关于delphi - 同时在多个控件之间共享一个 TDataSource 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54031649/

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