【发布时间】:2012-11-12 18:08:03
【问题描述】:
这是我想要完成的:
- 通过 TSQLDataset 的 CommandText 从数据库中检索 1 条记录:SELECT * FROM myTable WHERE ID = 1
- 使用 TClientDataset 修改记录。 (1 个待更新)
- 检索下一条记录。 SELECT * FROM myTable WHERE ID = 2
- 修改记录。 (现在有 2 个待更新)
- 最后,通过 ApplyUpdates 函数将 2 个挂起的更新发送回数据库。
当我执行第 3 步时,我得到“必须在刷新数据之前应用更新”。
如何在不应用挂起更新的情况下刷新 TClientDataSet?
【问题讨论】:
-
TClientDataSet旨在保存许多记录。您使用它一次提取和修改一条记录的方式似乎效率低下。将用户需要修改的两个(全部)记录都拉出来,让用户修改这些记录,然后使用ApplyUpdatesall-at-once 将更新应用到数据库不是更好吗? -
@James,如果有一个潜在的数百万基本表/记录集,将所有这些数据带到客户端来修改几条记录似乎效率低得多。
-
@jachguate - 我同意。然而,最有效的方法似乎是在提取更多数据之前应用更新。但是 OP 并没有解释太多关于该表或延迟(批量)更新为何如此重要的原因。如果需要延迟更新,那么您的回答似乎是最好的解决方案。
-
@JamesL.,对不起,我应该说明我一次拉一张唱片的原因。该数据库包含 50 万条记录,提取所有这些记录需要大量时间和网络资源。顺便说一句,我没有使用任何数据库网格,只是 TDBEdits 来修改每条记录。
标签: database delphi dbexpress tclientdataset