O/H tony_bat έγραψε:
> 
> 
> using D7 professional, firebird 2.0.3, firebird odbc 2.0
> I have google until tired.
> tried tmemorystream, tstream, tblobstream,
> created tblobfield tried assigning the value. I admit i do not know
> what to try next but i have not given up.
> all the examples I have seen on web don't work for me.
> I read something about tAdoblobstream but get error each time I try to
> create object: delphi does not recognize tadoblobstream.
> 
> I am able to store jpg to database now I can not get it back. I know I
> stored it because I used a third party tool and I see the stored
> picture.
> I am using ado components.
> 
> question 1. how do i get to use tadoblobstream.
> question 2. will anyone share a tid bit of code to do this.
> 
> Thanks
> In advance
> Tony


Tony

1. You don't have to. Every TDataset descendant provides
its own version of a TXXXBlobStream. The TBlobField calls
a virtual method of the TDataset to load the blob data and
that call ends up creating the right TXXXBlobStream.
If you know your field is not null then you just
   MyBlobField.SaveToStream(MyMemoryStream);
That call will actually initiate the call sequence
I just described.


2. Yes.


I'm not sure but I think I remember Delphi's 7 TDBImage
has some troubles with image types other than bitmaps.
Please, correct me if I'm wrong here. Not sure at all.


Anyway, try the following functions and let me know.
Using them you should be able to load the image
into a TImage control.

type
   TGraphicType = ( gtNone
                   ,gtICO
                   ,gtBMP
                   ,gtWMF
                   ,gtJPG
                   );


(*----------------------------------------------------------------------------
  Returns the type of graphic the stream may contains
  ----------------------------------------------------------------------------*)
function TAppUtls.GetGraphicType(Stream: TStream): TGraphicType;
var
   Buf : Word;
begin
   Result := gtNone;
   if Assigned(Stream) and (Stream.Size > SizeOf(Buf)) then
   begin
     Stream.Position := 0;
     Stream.Read(Buf, SizeOf(Buf));
     case Buf of
       $0000 : Result  := gtICO;
       $0001 : Result  := gtBMP;
       $4D42 : Result  := gtBMP;
       $CDD7 : Result  := gtWMF;
       $D8FF : Result  := gtJPG;
     end;
   end;
end;
(*----------------------------------------------------------------------------
  Tries to recognize the image format, the  Stream data contains.
  Loads Stream contents into Graphic by creating the appropriate Graphic object.
  ----------------------------------------------------------------------------*)
function TAppUtls.LoadGraphicFromStream(Stream: TStream; var Graphic: 
TGraphic): TGraphicType;
var
   GraphicType: TGraphicType;
begin
   Result := gtNone;

   GraphicType := GetGraphicType(Stream);

   case GraphicType of
     gtICO : Graphic := TIcon.Create;
     gtBMP : Graphic := TBitmap.Create;
     gtWMF : Graphic := TMetafile.Create;
     gtJPG : Graphic := TJPEGImage.Create;
     else    Graphic := nil;
   end;

   if Assigned(Graphic) then
   try
     Stream.Position := 0;
     Graphic.LoadFromStream(Stream);
     Result := GraphicType;
   except
     Graphic.Free;
     Graphic := nil;
   end;

end;
(*----------------------------------------------------------------------------*)
function TAppUtls.LoadPictureFromStream(Stream: TStream; Picture: TPicture): 
TGraphicType;
var
   Graphic   : TGraphic;
begin
   Result   := gtNone;
   Graphic  := nil;

   if Assigned(Stream) and Assigned(Picture) then
   begin
     Result := LoadGraphicFromStream(Stream, Graphic);
     Picture.Assign(Graphic);  // Graphic can be NIL, no problem with that
     FreeAndNil(Graphic);
   end;

end;
(*----------------------------------------------------------------------------*)
function TAppUtls.LoadPictureFromField(Field: TBlobField; Picture: TPicture): 
TGraphicType;
var
   MS : TMemoryStream;
begin
   Result   := gtNone;

   if Assigned(Field) and (not Field.IsNull) then
   begin
     MS := TMemoryStream.Create;
     try
       Field.SaveToStream(MS);
       MS.Position := 0;
       Result := LoadPictureFromStream(MS, Picture);
     finally
       MS.Free;
     end;
   end;
end;

-- 
Regards
Theo

------------------------
Theo Bebekis
Thessaloniki, Greece
------------------------
Greek_Delphi_Prog : a Delphi Programming mailing list in Greek at
    http://groups.yahoo.com/group/Greek_Delphi_Prog

CSharpDotNetGreek : A C# and .Net mailing list in Greek language at
    http://groups.yahoo.com/group/CSharpDotNetGreek

atla_custom : a Unisoft Atlantis Customization mailing list at
    http://groups.yahoo.com/group/atla_custom
------------------------


-----------------------------------------------------
Home page: http://groups.yahoo.com/group/delphi-en/
To unsubscribe: [EMAIL PROTECTED] 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/delphi-en/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/delphi-en/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[EMAIL PROTECTED] 
    mailto:[EMAIL PROTECTED]

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 

Reply via email to