![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сериализация своего объекта в базу
Tab © (2006-10-18 10:48:00)Создал свой объект, как сериализовать его в базу? например FB. Буду благодарен за пример.
Tab (2006-10-19 13:24:00) [21]procedure MLine.SaveToStream(const AField: TBlobField);
var
bs: TStream;
begin
bs := AField.DataSet.CreateBlobStream(AField, bmWrite);
try
bs.WriteDescendent(Self, nil);
finally
bs.Free;
end;
end;
в программе делаю так:
Dm.IBTable1.Edit;
Layer[1].SaveToStream(dm.IBTable1DATA_B);
данные вроде сохранились. так правильно?
а обратную операцию чето не понял как?
Через Query? Выбрать записи, затем в цикле прочитать из BLOB ReadFromStream?
Если так то ругается то MLine неподходит для TComponent
procedure MLine.LoadFromStream(const AField: TBlobField);
var
bs: TStream;
begin
bs := AField.DataSet.CreateBlobStream(AField, bmWrite);
try
self:=bs.ReadComponent(nil);
finally
bs.Free;
end;
end;
Сергей М. (2006-10-19 11:51:00) [22]
> Tab (18.10.06 20:14) [13]
> что мне это даст ?
Это (см. [14]) даст универсальность и возможность использования готовойтехнологии Delphi streaming system, как раз и разработанной Борландом для упрощения и унификации сохранения/воспроизведения объектов.
StriderMan (2006-10-19 11:34:00) [23]
> Tab (18.10.06 20:14) [13]
>
> > а в чем проблема унаследоваться от TComponent?
>
> что мне это даст ?
> удобоство при обработке SaveToStream?
> Просто в программе счет будет идти на сотни
и в этих сотнях компонент в каждом описывать сохранение свойств??
в наследниках TComponent достаточно их поместить в секцию published и он все сделает за тебя
Tab (2006-10-18 20:14:00) [24]
> а в чем проблема унаследоваться от TComponent?
что мне это даст ?
удобоство при обработке SaveToStream?
Просто в программе счет будет идти на сотни
StriderMan (2006-10-18 18:04:00) [25]
> Сергей М. © (18.10.06 16:01) [11]
TComponent как раз тот самый велосипед, который такие "друганы" упорно изобретают: у кого колесо квадратное, у кого педалей нет, у кого "седло от унитаза, а педаль от пианино", а руль от КАМАЗа
Сергей М. (2006-10-18 16:01:00) [26]
> в чем проблема унаследоваться от TComponent?
Распространенное заблуждение - "мой наследник класса TComponent занимает слишком дофига места в какой-то там памяти, сам не знаю в какой, но друган мой типа сказал что так"
StriderMan (2006-10-18 15:55:00) [27]
> Tab (18.10.06 14:00) [6]
> а если это не компонент а объект типа
> type
> Figure_= class
а в чем проблема унаследоваться от TComponent?
Сергей М. (2006-10-18 15:30:00) [28]
> Tab (18.10.06 15:26) [8]
Чтение в том жепорядке
Tab (2006-10-18 15:26:00) [29]чтение в просто обратном порядке7
Сергей М. (2006-10-18 14:04:00) [30]
> если это не компонент а объект типа
значит следует последовательно записать в стрим значния тех св-в объекта, которые уникально идентифицируют этот объект.
Tab (2006-10-18 14:00:00) [31]а если это не компонент а объект типа
type
Figure_= class
objType: integer;
pt_l: array [1..2] of TGPPoint;
first_p_set: boolean;
procedure Draw(gp: TGPGraphics); virtual; abstract;
end;
StriderMan (2006-10-18 13:35:00) [32]
procedure TKLCForm.SaveToBlob(const AField: TBlobField);
var
bs: TStream;
begin
bs := AField.DataSet.CreateBlobStream(AField, bmWrite);
try
bs.WriteDescendent(Self, nil);
finally
bs.Free;
end;
end;
писалось давно, поэтому пояснить почемуWriteDescendentне смогу. Но работает именно на FB/IBX.
Сергей М. (2006-10-18 12:45:00) [33]http://www.google.ru/search?q=%D0%94%D0%B5%D0%BB%D1%84%D0%B8+%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0+%D0%B2+%D0%BF%D0%BE%D1%82%D0%BE%D0%BA&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:ru:official
Tab (2006-10-18 12:42:00) [34]
> Если он наследник от TPersistent,
нет он
> Записать последовательно свойства объекта в TBlobStream
пожалуйста киньте примером
Сергей М. (2006-10-18 11:14:00) [35]
> как сериализовать его в базу?
Записать последовательно свойства объекта в TBlobStream
Desdechado (2006-10-18 11:06:00) [36]Если он наследник от TPersistent, то перекрой SaveToStream и сливай все в BLOB-поле.