dbimageでaccessの画像が読めません。


godon  2007-08-13 13:30:53  No: 27396  IP: 192.*.*.*

ado接続でアクセスmdbに接続しているのですが、テーブルにあるbmp(oleオブジェクト型)がdbimageコンポーネントで開けません。ビットマップが不正ですと出ます。アクセス側でBMPを埋め込みじゃなくリンクにしても同様です。
何かやり方があるんでしょうか?皆様よろしくお願いします。

編集 削除
めるめる  2007-08-13 17:05:16  No: 27397  IP: 192.*.*.*

> テーブルにあるbmp(oleオブジェクト型)がdbimageコンポーネントで
> 開けません。
その bmp(oleオブジェクト型)ってどうやって登録したものですか?
Delphi から登録した bmp でもダメですか?

編集 削除
godon  2007-08-13 19:26:54  No: 27398  IP: 192.*.*.*

ご返事ありがとうございます。
普通にaccessのテーブルデザインでデータ型をOLEオブジェクトにして、そのフィールドに適当なビットマップを指定しただけです。他のデータ型のフィールド(数値)などはちゃんと反映しますので接続は間違っていないと思うんですが…。delphiから登録したBMPではとの事ですが、すいません…意味がよくわかりません。環境delphi6プロ、アクセス2000、WINXPプロです。使用コンポーネントはADOコネクション、ADOクエリー、データソース、DBimageだけです。

編集 削除
めるめる  2007-08-14 15:56:43  No: 27399  IP: 192.*.*.*

根本的な原因は不明ですが、
当方でも直接 MS-ACCESS から OLE オブジェクト型に
Bitmap Image を登録し、そのデータを、DBImage 経由で読みだそうと
した時にビットマップが不正とのメッセージを確認しました。

MS-ACCESS の扱うビットマップとDelphi が扱うビットマップでは
何かが違うのでしょうか。

参考まで、私は、下記の要領で、DBImage --> ADOTable --> .mdb に
Bitmap イメージを登録しています。問題なく読込表示できています。
※ACCESS 上では、バイナリデータとして扱われているようです。

// ファイルから読み込む場合
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  OpenPictureDialog1.Filter
      := 'BMPファイル(*.bmp)|*.bmp|すべてのファイル(*.*)|*.*';
  if OpenPictureDialog1.Execute then
  begin
    if not (ADOTable1.State in [dsEdit, dsInsert]) then
      ADOTable1.Edit;
    DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
  end;
end;


// クリップボートから読み込む場合
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
    // uses節にClipbrdを加えること
  if Clipboard.HasFormat(CF_BITMAP)
     or Clipboard.HasFormat(CF_METAFILEPICT)
     or Clipboard.HasFormat(CF_PICTURE) then
    DBImage1.PasteFromClipboard;
end;

編集 削除
godon  2007-08-14 18:37:02  No: 27400  IP: 192.*.*.*

めるめるさん、わざわざ試して頂いてありがとうございます。
なるほどDELPHIから直接登録の意味がわかりました。
Accessで編集するのでなくDELPHIで直接MDBを編集したら可能との事ですね。
少々自分の頭が堅かったようです…。
取り合えず逃げ道は見つかりました。ヒントサンクスでした。

編集 削除
Souichi K.  URL  2007-08-21 22:19:24  No: 27401  IP: 192.*.*.*

はじめまして。

僕も同じことで悩んでいろいろ調べたことがありました。

解決方法はわからないのですが、原因は、ビットマップデータのヘッダーに、なんかのデータが付加されているためだと思います。実際、そのヘッダー部分だけ取り除くと元のビットマップでした。

その時の日記↓
http://blog.goo.ne.jp/souichi-kikaizikake/e/9b80f863c5e751fa6961774e09266885

もう少し綺麗(?)な方法がないか僕も知りたいです。

編集 削除