delphi - 是否可以拍摄数据集的快照?

标签 delphi dataset devart

在我的应用程序中,我只使用 DBAware 组件(少数地方除外)。

我有一个场景,我创建了一个主数据集(例如客户)、详细数据集(例如订单)、子详细数据集(例如订单项目)。通常我允许用户进行更改(数据集处于浏览模式)然后我发布。简单。

无论如何,在编辑子数据集时,我想添加一种简单的撤消功能:如果用户取消操作我想恢复打开表单之前的数据集。

现在为了实现这个,我可以考虑在 TClientDataSet 或类似组件中制作数据集的副本,但是还有其他技术吗?就像使用 Delphi 可以简单地创建数据的“快照”一样。使用伪代码:

MySubDetailDataSet.SaveSnapShot;
SubDetailForm.ShowModal;
if ModalResult = mrCancel then MySubDetailDataSet.RestoreSnapShot;

Delphi 组件是否有可能“现成”的东西?

顺便说一句,我使用来自 DevArt 组件的 SDAC,所以如果您知道一种仅适用于这些组件而不适用于 Delphi 标准组件的技术,欢迎您!

最佳答案

在客户端数据集中,更改存储在增量中 - 您可以调用 CancelUpdates 来清除增量并恢复到原始数据集。还有其他更精细的方法。请参阅帮助中的“撤消更改”。

如果您使用的是 RDBMS 并且正确地处于事务中,则可以回滚事务。一些数据库提供保存点以回滚到给定的保存点而不是回滚整个事务,但这是特定于数据库的。事务通常按 session 进行,而不是按单个表或查询进行。您必须确保在给定事务中只执行您可能需要回滚的更改。

客户端数据集可能是一种“更轻便”的方法,因为它们仅在客户端管理数据并且不需要数据库资源。当您在数据库中处理事务时,需要一些资源来跟踪它和更改的数据。交易的时间应该与要求的一样长,但不能更长。

另请注意,事务可能意味着某些锁。锁管理可能因数据库而异,有些可能会升级锁,阻止比需要更多的用户。始终使用足够数量的并发用户进行测试,以确保正确使用事务。

关于delphi - 是否可以拍摄数据集的快照?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7810119/

相关文章:

.net - 是否有任何不需要安装Oracle Client的Oracle .NET数据提供程序?

xml - 如何获取 XML 属性的值?

delphi - 为什么 TStringStream.Bytes 与从 'TStream.Read' 获取的内容不同

Delphi-如何获取目录中所有文件的列表

python - 基于矩阵的Python 3D绘图

c# - Entity Framework : Server did not respond within the specified time out interval

具有 EntityFramework 支持的 Oracle UDT

delphi - Visual C++ 是开始可视化编程的好选择吗?

c# - 数据集是否与记录集相同

python - 尝试在 Pytorch 中加载自定义数据集