Я хотел бы использовать SaveToStream для сохранения ClientDataSet ВМЕСТЕ С ДРУГИМИ МАТЕРИАЛАМИ. Вот краткий пример:
filename := ChangeFileExt(Application.ExeName, '.dat');
FS := TFileStream.Create(filename, fmCreate);
CDS.SaveToStream(FS);
ShowMessage('After save, position is ' + IntToStr(FS.Position));
{now write a longint}
L := 1234;
siz := SizeOf(L);
Write(L, siz);
FS.Free;
Но когда я пытаюсь загрузить это обратно с помощью LoadFromStream и снова отображаю позицию после загрузки ClientDataSet, я вижу, что позиция теперь составляет 4 байта ПОСЛЕ того, как клиентский набор данных был первоначально сохранен. Кажется, что CDS.LoadFromStream просто идет вперед и потребляет все, что следует за ним. В результате, когда я затем пытаюсь прочитать longint, я получаю ошибку конца файла.
Недостаточно просто использовать CDS.SaveToStream в конце создания файла, потому что мне действительно хотелось бы сохранить в файл ДВА клиентских набора данных, один за другим, плюс другой материал.
Идеи? Спасибо.
ReadDataPacket
иWriteDataPacket
(которые являются базовыми методами чтения и записи потока) имеют логические параметры, которые позволяют хранить набор данных и считывать размер данных для обработки в поток. Итак, я думаю, что самой простой задачей для вашей задачи может быть создание подкласса для набора данных и заполнение (и использование) этого логического параметра. - person TLama   schedule 21.03.2015