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/