お世話になります。
delphi5,BDE,FireBird1.5で作成したプログラムを、Delphi2007,IBX,FireBird1.5に変更しています。
画像(Blob)の表示をしようとすると、型キャストエラーが出ます。
Var
Strm: TBlobStream;
begin
....
Strm := TBlobStream.Create(TBlobField(IBQuery1.FieldByName('Pic')),bmRead);
....
end;
ヘルプを見ると、TBlobStreamはBDE対応のデータセットのBlob項目を、ADOの場合はTADOBlobStreamを使用すると書かれていますが、IBXの場合は何を使えば良いのか見当たりません。
IBXの場合は、どのようにすれば画像(Blobデータ)を表示することができるのか教えて頂きたいのですが。よろしくお願い致します。
TIBBlobStreamではどうでしょうか?
外してたらすみません。
moruさん、ありがとうございます。
デフォルトではTIBBlobStreamは使うことができません。(この識別子は宣言されていません)
uses節に何かを記入すれば使えるのでしょうか。
delphiではないのですが、ここではTIBBlobStreamが使われています。
http://groups.yahoo.co.jp/group/Firebird-jp-general/messages/679?expand=1
忘れていました。以前の実験で
Uses節に、IBBlobを追加してTIBBlobStreamが使えました。
その後もエラーがでて解決できなかったのです。よろしくお願い致します。
Var
Strm: TStream;
begin
....
Strm := IBQuery1.CreateBlobStream(IBQuery1.FieldByName('Pic'),bmRead);
....
end;
ではどうでしょうか?
FireBird 1.0 1.5 Delphi 7 2006 2007 にて
IBX を利用して、実際に Jpeg や BitMap を
Blob に書き込み・読み出しをしている部分からの抜粋です。
正解かどうかはわかりませんが、・・・
現実に動いていますので参考に・・・・
//BitMap または Jpeg の表示
procedure TFixxxx.BitMap_or_Jpeg(); //表示
var
BS1 :TStream;
Bitmap1 :TBitmap;
jpg1 :TJPEGImage;
begin
try
BS1 := IBSQL.CreateBlobStream(IBSQL.FieldByName('PHUTO_Blob'),bmRead);
Bitmap1 := TBitmap.Create;
try
Bitmap1.LoadFromStream(BS1);
Image_X.Picture.Graphic := Bitmap1;
finally
BS1.Free;
Bitmap1.Free;
end;
except
BS1 := IBSQL.CreateBlobStream(IBSQL.FieldByName('PHUTO_Blob'),bmRead);
jpg1 := TJPEGImage.Create;
try
jpg1.LoadFromStream(BS1);
Image_X.Picture.Graphic := jpg1;
finally
BS1.Free;
jpg1.Free;
end;
end;
end;
//データベースへの入力
procedure TInputF.Button_OK_Click(Sender: TObject);
Var
BS1 :TMemoryStream;
jpg1 :TJPEGImage;
begin
BS1 := TMemoryStream.Create;
jpg1 := TJPEGImage.Create;
with IBSQL_In do
begin
Close;
SQL.Clear;
SQL.Add(' insert into DATABASE PHOTO_BLOB values :parPHOTO_BLOB ');
end;
//************************************
//Bitmap ==> Jpeg 変換
//************************************
jpg1.Assign(Image_1.Picture.Graphic);
jpg1.Compress;
jpg1.SaveToStream(BS1);
IBSQL_In.ParamByName('PHOTO_BLOB').LoadFromStream(BS1,ftBlob);
//************************************
//Jpeg の場合
//************************************
Image_1.Picture.Graphic.SaveToStream(P1);
IBSQL_In.ParamByName('PHOTO_BLOB').LoadFromStream(P1,ftBlob);
try
IBSQL_In.ExecSQL;
IBTr1.Commit*****;
finally
BS1.Free;
jpg1.Free;
end;
end;
end;
返事が遅くなりました。
DEKOさん、MARU3さん
教えて頂いたコードで画像が表示できることを確認しました。
DEKOさん、MARU3さん、本当にありがとうございました。
これで、DBEからIBXへの変更が完了です。(だと思います)
本当に助かりました。
ツイート | ![]() |