【问题标题】:How to not load all database records in my TListbox in Firemonkey Delphi XE8如何在 Firemonkey Delphi XE8 的 TListbox 中不加载所有数据库记录
【发布时间】:2025-12-09 14:50:01
【问题描述】:

我在 Delphi Xe8 中有一个多设备项目。我有一个使用数据库记录加载的 TListBox 组件。

问题是有时列表可能非常大,因此加载时间会很长。所以我想部分加载它,当我向下滚动时加载新记录。我该怎么做?

现在我使用 TFDQuery 加载表的每条记录。

更新: 经过一段时间后,我意识到问题不在于从数据库中加载所有记录,而在于在 TListBox 中创建所有 TListBoxItems。所以我仍然想做几乎相同的事情,但现在加载所有数据库记录,但不为所有记录创建 TListBoxItems。

【问题讨论】:

  • 能否在查询中添加条件或“top”,这样查询就不会返回表中的所有记录?
  • @Tim3880 嗯,它是一个 SQLite 数据库,所以你可以做简单的查询

标签: database delphi device firemonkey delphi-xe8


【解决方案1】:

您可以在 TFDQuery 上的 Embarcadero wiki 上设置 BlockReadSize

对于启用 BDE 的数据集,设置 BlockReadSize 也会导致 数据集以获取 BlockReadSize 块中的数据库信息 记录,然后将其缓冲。这可以最大限度地减少您之间的流量 应用程序和数据库服务器。

您可以尝试的另一件事是具有 RowSetSize 属性的 TFDQuery 的 FetchOptions

我目前没有 FireMonkey,所以我可以测试一下。

【讨论】:

  • 我会的!我尝试将 RowSetSize 属性与我的 TFDQuery 一起使用,但这并不可悲。但是,如果您阅读我的更新,您会发现我现在不需要部分加载数据库,而是不需要加载所有 ListBoxItems