Here is the example that I handle image Database( MySQL ) BLOB and Lazreport :
Table structure : create table imagelist ( id int AUTO_INCREMENT, cimage blob, primary key ( id ) ) ;
I am using Zeos Lib as example ( but it also work for SQLdb ).
1. Load image from file to database :
procedure TForm1.dbsaveimage(mfilename, mfldname: String);
var
ms : TMemoryStream ;
begin
ms := TMemoryStream.Create ;
ms.LoadFromFile( mfilename ) ;
ms.Position := 0 ;
ZQuery1.SQL.Clear ;
ZQuery1.SQL.Add( 'insert into imagelist ( cimage ) values ( :cimage )' ) ;
ZQuery1.Params.Items[ 0 ].LoadFromStream( ms, ftBlob ) ;
ZQuery1.ExecSQL ;
ms.Free
2. Load image from database and display on TImage
var
ms : TMemoryStream ;
begin
ZQuery1.SQL.Clear ;
ZQuery1.SQL.Add( 'select * from imagelist where id = ' + IntToStr( id ) ) ;
ZQuery1.Active := True ;
ms := TMemoryStream.Create ;
TBlobField( ZQuery1.FieldByName( 'cimage' ) ).SaveToStream( ms ) ;
ms.Position := 0 ;
Image1.Picture.LoadFromStream( ms ) ;
ms.Free ;
The above method work for jpg, bmp, png .... any type of graphic that TImage supported !
3. Load Image from database and display on Lazreport
procedure TForm1.dbimageinlazreport;
var
ms : TMemoryStream ;
mPict : TfrPictureView ;
mImage : TImage ;
mTop,mLeft,mWidth,mHeight : Integer ;
begin
ms := TMemoryStream.Create ;
mImage := TImage.Create( Self );
ZQuery1.SQL.Clear ;
ZQuery1.SQL.Add( 'select * from imagelist where id = 1' ) ;
ZQuery1.Active := True ;
TBlobField( ZQuery1.FieldByName( 'cimage' ) ).SaveToStream( ms ) ;
ms.Position := 0 ;
mImage.Picture.LoadFromStream( ms ) ;
mTop := 10 ;
mLeft := 10 ;
mWidth := 50 ;
mHeight := 50 ;
mPict := TfrPictureView.Create ;
mPict.SetBounds( mTop,mLeft,mWidth,mHeight ) ;
mPict.Picture.Assign( mImage.Picture ) ;
frReport1.Pages[ 0 ].Objects.Add( mPict ) ;
mImage.Free ;
ms.Free ;
// no need to free mPict, frReport1 will free it automatically
end;