[DUG] Blob primer
Robert martin
rob at wildsoft.co.nz
Fri Jul 1 10:01:41 NZST 2005
Hi.
Dont know if this helps but here is how we load and seve data (cut from
code messily). We are using IBO and Firebird.
with zMainDM.GeneralIB_Query do begin
IB_Transaction.StartTransaction;
try
SQL.Text := 'SELECT r.FileName, ra.FileBlob ' +
'FROM ReportActivity ra ' +
'JOIN Report r ON r.ReportRef = ra.ReportRef ' +
'WHERE ra.ActivityRef = :ActivityRef;';
Prepare;
//Extract Archived file
FileStream := TFileStream.Create(FileName +
't', fmCreate);
try
DBStream :=
CreateBlobStream(FieldByName('FileBlob'), bsmRead);
try
FileStream.CopyFrom(DBStream, 0);
finally
DBStream.Free;
end;
finally
FileStream.Free;
end;
...
//The above runs an SQL to select the desire blob and saves it to a file
(with an extra 't' in the name for obscure reasons :) )
zMainDM.InsertActivityIB_Query.SQL.Text := 'INSERT
INTO ReportActivity ' +
'(ActivityRef, ReportRef, VersionNo, rDate, rTime, Comment, UserRef,
Activity, FileBlob, Approved, Canceled) ' +
'VALUES ' +
'(:ActivityRef, :ReportRef, :VersionNo, :rDate, :rTime, :Comment,
:UserRef, :Activity, :FileBlob, :Approved, ''F'');';
zMainDM.InsertActivityIB_Query.Prepare;
.....
//Compress Report and insert into query
CompLHA.ForceUpperCase := False;
CompLHA.FilesToProcess.Clear;
CompLHA.FilesToProcess.Add(InEdit.Text);
CompLHA.ArchiveName := ExtractFileName(InEdit.Text);
CompLHA.CompressionMethod := colh5;
SList := TStringList.Create;
Stream := TMemoryStream.Create;
try
SList.Add(InEdit.Text);
CompLHA.CompressFilesToStream(Stream, SList, colh5);
//Stream now contains compressed file, copy to
insert statement
DBStream :=
zMainDM.InsertActivityIB_Query.CreateBlobStream(zMainDM.InsertActivityIB_Query.ParamByName('FileBlob'),
bsmWrite);
DBStream.CopyFrom(Stream, 0);
finally
Stream.Free;
SList.Free;
end;
The above has an insert SQL to load the blob. It compresses the file
and loads it into the query to insert. You could replace the CompLHA
stuff with a std stream load.
It is really quite simple to use, just a mix of SQL and TStreams.
Rob Martin
Software Engineer
phone +64 03 377 0495
fax +64 03 377 0496
web www.chreos.com
Wild Software Ltd
Phil Middlemiss wrote:
> Could anyone give me a link to a "how-to" about blobs? I'm using D6
> with firebird - there is no GUI (it's a service) so I would like to
> just use SQL if possible.
>
> Having not used blobs before I'm wondering:
> - what is a subtype? The Interbase documentation assumes you know
> - what is a good size for the segment length
> - how to specify binary data in a sql - if it's actually possible.
> - if I can't just use sql then what's the best way?
>
> Phil.
>
> _______________________________________________
> Delphi mailing list
> Delphi at ns3.123.co.nz
> http://ns3.123.co.nz/mailman/listinfo/delphi
>
More information about the Delphi
mailing list