Как вы, возможно, знаете, SaveToFile
и LoadFromFile
существуют в основном для поддержки режима работы "Портфель" CDS, при котором вы можете работать с локальной копией записей базы данных, будучи отключенными от исходной базы данных записей, сохраняя изменения локально, а затем применить их, как только вы подключитесь к нему. Сохраненный файл включает в себя кэш изменений CDS, так что вы можете сделать что-то вроде этого:
clientDataSet1.LoadFromFile('myclient.cds');
clientDataSet1.UndoLastChange;
, и это вернет записи CDS в состояние, в котором они находились до последнего изменения, сохраненного в CDS до вызова SaveToFile.
Однако, это не совсем то, о чем вы просили, и мне показалось, что вернуть 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;
(или вы можете сохранить / загрузить из памяти stream).
Кстати, я не знаю, знакомы ли вы с ним, но CDS имеют свойство SavePoint , которое очень удобно для возврата и отмены изменений; к сожалению, SavePoints не позволяют возвращать прошлые операции, такие как LoadFromFile
и ApplyUpdates
, потому что они очищают кэш изменений CDS.
Что касается вашего запроса 'clearData', если вы просто хотите очистить данные CDS, просто наберите
clientDataSet1.EmptyDataSet;