Moin.
Ich sehe da uzwei möglichkeiten:
1. Du versuchst die kompo direkt in ein binäres
DB feld zu streamen, einen Blob oder so. Bin da kein spezialist...ist aber IMO die beste und schnellste lösung!
2. Du konvertierst den binären stream in ein text-
dfm. -> ObjectBinaryToText -> ObjectTextToBinary
So hab ich es gelöst:
Delphi-Quellcode:
function SaveCompoToFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;
var Stream1:TMemoryStream;
Stream2:TMemoryStream;
format : TStreamOriginalFormat;
begin
result := false;
format := sofText;
Stream1 := TMemoryStream.Create;
Stream2 := TMemoryStream.Create;
try
Stream1.WriteComponent(aCompo);
Stream1.Position := 0;
if not asBinary then
begin
format := sofText;
ObjectBinaryToText(Stream1,Stream2,format);
end else Stream1.SaveToStream(Stream2);
Stream2.SaveToFile(FileName);
result := true;
finally
Stream1.Free;
Stream2.Free;
end;
end;
function LoadCompoFromFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;
var FileStream:TFileStream;
MemoryStream:TMemoryStream;
format:TStreamOriginalFormat;
begin
result := false;
if not FileExists(fileName) then exit;
MemoryStream := TMemoryStream.Create;
FileStream := TFileStream.Create(FileName,fmOpenRead);
try
if not asBinary then
begin
format := sofBinary;
ObjectTextToBinary(FileStream,MemoryStream,format);
end else MemoryStream.LoadFromStream(FileStream);
MemoryStream.Position := 0;
MemoryStream.ReadComponent(aCompo);
result := true;
finally
FileStream.Free;
MemoryStream.Free;
end;
end;
Denke das hilft dir erstmal weiter. Aber in eine datei schreiben dann in ein memo laden, um es dann in die
DB zu streamen hört sich nicht gerade effizient an
mâxîmôv.
{KDT}