{This one copies from one memo field to another.}
procedure TForm1.Button1Click(Sender: TObject);
var
b1, b2: TBlobStream;
begin
b1 := TBlobStream.create(Table1Notes, bmRead);
try
table2.edit;
b2 := TBlobStream.create(Table2MyBlob, bmReadWrite);
try
b2.CopyFrom(b1, b1.size);
finally
b2.free;
end;
finally
b1.free;
end;
table2.post;
end;
{Write to a stream.}
procedure TForm1.Button1Click(Sender: TObject);
var
Stream: TBlobStream;
s: string;
begin
table1.edit;
Stream := TBlobStream.Create(Table1Notes, bmReadWrite);
try
Stream.Seek(0, 2); {Seek 0 bytes from the stream's
end point (2).}
s := 'Lloyd is really cool.';
Stream.write(s[1], length(s));
finally
Stream.Free;
end;
table1.post;
end;
{Read from a stream.}
procedure TForm1.Button1Click(Sender: TObject);
var
Buffer: PChar;
Size: Integer;
Stream: TBlobStream;
begin
{ Here is how it is done from a query: }
{ Stream := TBlobStream.Create(query1.FieldByName('MemoField')
as TBlobField, bmRead);}
Stream := TBlobStream.Create(Table1MemoField, bmRead);
try
Size := Stream.Seek(0, 2);
Stream.Seek(0, 0);
Inc(Size);
GetMem(Buffer, Size);
try
FillChar(Buffer^, Size, #0);
Stream.Read(Buffer^, Size);
Memo1.SetTextBuf(Buffer);
finally
FreeMem(Buffer, Size);
end;
finally
Stream.Free;
end;
end;
See also:
How do I fill a TMemo from a PChar using
a TBlobStream?