TClientDataSet - 如何 'cancel' 从文件加载?
TClientDataSet - how to 'cancel' loadfromfile?
我有一个以 .cds 格式存储数据的 TClientDataSet。
假设我这样做了:
clientDataSet1.loadFromFile('myclient.cds');
在我这样做之后,是否有办法恢复加载并将组件置于调用此方法之前的状态,以便我可以添加/删除与 .cds 文件无关的字段?
我想我需要使用 'clearData' 选项,但我只能在设计时这样做,我没有找到在 运行 时间内调用它的方法。
如您所知,SaveToFile
和 LoadFromFile
的存在主要是为了支持 CDS 的
"Briefcase" 操作模式,您可以在其中处理数据库记录的本地副本
在与记录的源数据库断开连接时,将更改保存在本地
然后在重新连接后应用它们。保存的文件包括更改缓存
CDS,这样你就可以做这样的事情:
clientDataSet1.LoadFromFile('myclient.cds');
clientDataSet1.UndoLastChange;
这会将 CDS 的记录恢复到它们之前的状态
在调用 SaveToFile 之前保存到 CDS 的最后更改。
然而,这并不是你所要求的,在我看来这就是如何恢复
将 CDS 恢复到调用 LoadFromFile
之前的任何状态,然后
点它可能包含完全不同的数据。
如果你想恢复之前的状态,你可以这样做,提供
您在调用 LoadFromFile
.
之前采取措施保存它
最简单的是
clientDataSet1.SaveToFile('myclient.prv');
clientDataSet1.loadFromFile('myclient.cds');
if ReloadPreviousVersion then
clientDataSet1.loadFromFile('myclient.prv');
或者,如果您想避免保存到磁盘
var
PrvData : OleVariant;
[...]
PrvData := clientDataSet1.Data;
clientDataSet1.loadFromFile('myclient.cds');
if ReloadPreviousVersion then
clientDataSet1.Data := PrvData;
(或者您可以从内存流中保存 to/load)。
顺便说一句,我不知道你是否熟悉它,但是 CDS 有一个 SavePoint property,这对于回溯和撤消更改非常方便;不幸的是,SavePoints 不允许回溯过去的操作,如 LoadFromFile
和 ApplyUpdates
,因为这些会清除 CDS 的更改缓存。
关于您的 'clearData' 查询,如果您只想清除 CDS 的数据,只需执行
clientDataSet1.EmptyDataSet;
我有一个以 .cds 格式存储数据的 TClientDataSet。
假设我这样做了:
clientDataSet1.loadFromFile('myclient.cds');
在我这样做之后,是否有办法恢复加载并将组件置于调用此方法之前的状态,以便我可以添加/删除与 .cds 文件无关的字段?
我想我需要使用 'clearData' 选项,但我只能在设计时这样做,我没有找到在 运行 时间内调用它的方法。
如您所知,SaveToFile
和 LoadFromFile
的存在主要是为了支持 CDS 的
"Briefcase" 操作模式,您可以在其中处理数据库记录的本地副本
在与记录的源数据库断开连接时,将更改保存在本地
然后在重新连接后应用它们。保存的文件包括更改缓存
CDS,这样你就可以做这样的事情:
clientDataSet1.LoadFromFile('myclient.cds');
clientDataSet1.UndoLastChange;
这会将 CDS 的记录恢复到它们之前的状态 在调用 SaveToFile 之前保存到 CDS 的最后更改。
然而,这并不是你所要求的,在我看来这就是如何恢复
将 CDS 恢复到调用 LoadFromFile
之前的任何状态,然后
点它可能包含完全不同的数据。
如果你想恢复之前的状态,你可以这样做,提供
您在调用 LoadFromFile
.
最简单的是
clientDataSet1.SaveToFile('myclient.prv');
clientDataSet1.loadFromFile('myclient.cds');
if ReloadPreviousVersion then
clientDataSet1.loadFromFile('myclient.prv');
或者,如果您想避免保存到磁盘
var
PrvData : OleVariant;
[...]
PrvData := clientDataSet1.Data;
clientDataSet1.loadFromFile('myclient.cds');
if ReloadPreviousVersion then
clientDataSet1.Data := PrvData;
(或者您可以从内存流中保存 to/load)。
顺便说一句,我不知道你是否熟悉它,但是 CDS 有一个 SavePoint property,这对于回溯和撤消更改非常方便;不幸的是,SavePoints 不允许回溯过去的操作,如 LoadFromFile
和 ApplyUpdates
,因为这些会清除 CDS 的更改缓存。
关于您的 'clearData' 查询,如果您只想清除 CDS 的数据,只需执行
clientDataSet1.EmptyDataSet;