AccessのOLEオブジェクトの画像を表示したい

解決


ぽん太  2009-05-18 14:09:41  No: 145922  IP: [192.*.*.*]

お世話になります。
VB2005で、AccessのOLEオブジェクトの画像をPictureBoxに表示したいのですが、
うまく表示が出来ませんので、ご教授願えないでしょうか?

現状、↓のようなコードを書いてみたのですが、
「使用されたパラメータが有効ではありません。」とエラーが帰ってきます。
===================================================================
Dim AdoRs As New ADODB.Recordset
Dim strSql as string = "SELECT IMAGE FROM TABLE"
AdoRs.Open(wstrSql, gConnect, ADODB.CursorTypeEnum.adOpenKeyset,                             ADODB.LockTypeEnum.adLockOptimistic)
Do Until AdoRs.EOF
  Dim bytBLOBData() As Byte = AdoRs.Fields("IMAGE").Value
  Dim stmBLOBData As New MemoryStream(bytBLOBData)
  PictureBox.Image = System.Drawing.Image.FromStream(stmBLOBData)
AdoRs.MoveNext()
Loop
===================================================================

よろしくお願いします。

編集 削除
魔界の仮面弁士  2009-05-18 16:15:31  No: 145923  IP: [192.*.*.*]

ADODB ではなく、ADO.NET への移行をお薦めしておきます。
ADODB を使う場合は、ReleaseComObject の併用を検討してみてください。

http://support.microsoft.com/kb/321415/ja
http://support.microsoft.com/kb/318559/ja
http://msdn.microsoft.com/ja-jp/library/cc440840.aspx


> AccessのOLEオブジェクトの画像をPictureBoxに表示したいのですが、
画像ファイルの、生データ(バイナリそのもの)を保存している場合には、
ぽん太さんのコードでも表示できるかと思います。

ただしサイズが大きい場合には、Value ではなく
GetChunk を使った方が良いでしょうけれども。

SQL 文で登録する例。
http://yaplog.jp/orator/archive/36

Recordset.AppendChunk メソッドで登録する例。
http://www.accessclub.jp/bbs6/0018/das5187.html


しかしながら、Access の「挿入」メニュー等から埋め込んだ物については、
VB6 の OLE コントロールや、Access の PictureBox に表示する事は
出来るものの、.NET からの利用はほぼ不可能です。
これは、OLE 埋め込みのために追加情報が書き込まれてしまうためです。
http://www.hkawaguchi.com/blog/archives/000215.html

下記のコード(VB.NET ではなく、VBScript / VB4 / VBA ですが)のように、
OBJECTHEADER を切り出し、データ部本体を無理矢理取り出す方法はありますが、
保証される方法ではありません。
http://support.microsoft.com/kb/175261/ja
http://support.microsoft.com/kb/147727/ja
http://www.moug.net/faq/viewtopic.php?t=38016

編集 削除
ぽん太  2009-05-18 19:38:58  No: 145924  IP: [192.*.*.*]

魔界の仮面弁士さん、ありがとうございました。

VB6で出来て、.NETでは複雑になるんですね・・・
とても勉強になりました。

OLEオブジェクトの部分だけ、VB6でやることにします。
それが一番無難そうなので・・・
どうもありがとうございました。

編集 削除