小编Dar*_*lli的帖子

附加到先前由另一个线程创建的数据集

这个问题与类似,但背景不同.

编译器:Delphi 2010,即将推出Delphi XE5.

我已经构建了一个很好的应用程序,通过ZEOS组件管理远程MySQL服务器上的数据.由于连接可能失败并且SQL很慢,我使用了整齐的OmniThreadLibrary来创建一个SQL服务器看门狗并卸载了很多"只读"表加载到线程.截至目前,我在主窗体显示之前手动创建了三个数据模块,每个模块都有独立的TZConnection和一些链接到同一数据模块TZConnection的TZReadOnlyQuery组件.每个线程从其自身内部实例化其相关数据模块,然后执行查询.

看门狗工作得很好,但我对第二部分有疑问,那就是"只读"表格线程.查询已经工作但我还没有在主应用程序业务代码中使用他们的结果,我必须在其他表上插入和更新数据.

在我的计划中,我在主应用程序甚至连接它们之前读取并加载了所有这些"只读"数据集(整个线程间状态机已经完成).理论上应该没有并发问题,因为"只读"表线程已完成其任务并且现在处于空闲状态.但我不知道如果此时我将控件或其他数据集/数据源/从主窗体连接到空闲线程数据模块会发生什么.

我会搞砸,因为主要形式TZSession与线程数据模块不一样吗?只有在交付申请后才能发现罕见且令人讨厌的访问违规行为(当然!).基本上我应该使用什么样的信心或预防措施来访问在另一个线程中创建的查询组件,假设只有主应用程序执行它并且仅用于读取数据?它甚至可能/健康吗?或者我错过了一些"最佳实践"的方式吗?

提前致谢.

mysql database delphi multithreading dataset

5
推荐指数
1
解决办法
775
查看次数

如何使用数据库数据(VCL)快速填充组合框

我已经在网上阅读了各种各样的文档,关于什么应该是一个非常普遍和无痛的实现.因为我没有找到一致和光滑的回复(即使Embarcadero网站描述了一些错误的属性!)我将发布一个"短"的howto.

典型的,经常使用的情况:开发人员只想在组合框中显示一些数据库提取的信息(即语言选择),从中获取用户的选择,就是这样.

要求:

  1. Delphi,或多或少任何版本.VCL受保.
  2. 数据库表.让我们假设一个带有idvalue字段的简单表.
  3. DataSet(包括查询和ClientDataSets).
  4. 链接到DataSet的DataSource.
  5. 链接到DataSource的TDBLookupComboBox,它将显示值列表并"返回"当前选择的id.

database delphi lookup combobox dataset

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

database ×2

dataset ×2

delphi ×2

combobox ×1

lookup ×1

multithreading ×1

mysql ×1