ado接続でアクセスmdbに接続しているのですが、テーブルにあるbmp(oleオブジェクト型)がdbimageコンポーネントで開けません。ビットマップが不正ですと出ます。アクセス側でBMPを埋め込みじゃなくリンクにしても同様です。
何かやり方があるんでしょうか?皆様よろしくお願いします。
> テーブルにあるbmp(oleオブジェクト型)がdbimageコンポーネントで
> 開けません。
その bmp(oleオブジェクト型)ってどうやって登録したものですか?
Delphi から登録した bmp でもダメですか?
ご返事ありがとうございます。
普通にaccessのテーブルデザインでデータ型をOLEオブジェクトにして、そのフィールドに適当なビットマップを指定しただけです。他のデータ型のフィールド(数値)などはちゃんと反映しますので接続は間違っていないと思うんですが…。delphiから登録したBMPではとの事ですが、すいません…意味がよくわかりません。環境delphi6プロ、アクセス2000、WINXPプロです。使用コンポーネントはADOコネクション、ADOクエリー、データソース、DBimageだけです。
根本的な原因は不明ですが、
当方でも直接 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;
めるめるさん、わざわざ試して頂いてありがとうございます。
なるほどDELPHIから直接登録の意味がわかりました。
Accessで編集するのでなくDELPHIで直接MDBを編集したら可能との事ですね。
少々自分の頭が堅かったようです…。
取り合えず逃げ道は見つかりました。ヒントサンクスでした。
はじめまして。
僕も同じことで悩んでいろいろ調べたことがありました。
解決方法はわからないのですが、原因は、ビットマップデータのヘッダーに、なんかのデータが付加されているためだと思います。実際、そのヘッダー部分だけ取り除くと元のビットマップでした。
その時の日記↓
http://blog.goo.ne.jp/souichi-kikaizikake/e/9b80f863c5e751fa6961774e09266885
もう少し綺麗(?)な方法がないか僕も知りたいです。
ツイート | ![]() |