IBXを使用した場合の画像(BLOBデータ)の表示

解決


久慈  2007-11-13 20:51:42  No: 28390

お世話になります。
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データ)を表示することができるのか教えて頂きたいのですが。よろしくお願い致します。


moru  2007-11-13 21:25:58  No: 28391

TIBBlobStreamではどうでしょうか?
外してたらすみません。


久慈  2007-11-13 22:04:38  No: 28392

moruさん、ありがとうございます。

デフォルトではTIBBlobStreamは使うことができません。(この識別子は宣言されていません)
uses節に何かを記入すれば使えるのでしょうか。

delphiではないのですが、ここではTIBBlobStreamが使われています。
http://groups.yahoo.co.jp/group/Firebird-jp-general/messages/679?expand=1


久慈  2007-11-13 22:18:22  No: 28393

忘れていました。以前の実験で
Uses節に、IBBlobを追加してTIBBlobStreamが使えました。
その後もエラーがでて解決できなかったのです。よろしくお願い致します。


DEKO  2007-11-14 18:26:48  No: 28394

Var
 Strm: TStream;
begin
 ....
 Strm := IBQuery1.CreateBlobStream(IBQuery1.FieldByName('Pic'),bmRead);
 ....
end;

ではどうでしょうか?


MARU3  2007-11-15 01:46:41  No: 28395

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;


久慈  2007-11-15 20:00:09  No: 28396

返事が遅くなりました。

DEKOさん、MARU3さん
教えて頂いたコードで画像が表示できることを確認しました。
DEKOさん、MARU3さん、本当にありがとうございました。

これで、DBEからIBXへの変更が完了です。(だと思います)
本当に助かりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加