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
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi

_______________________________________________
Delphi mailing list
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi

Reply via email to