お世話になります。
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
===================================================================
よろしくお願いします。
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
魔界の仮面弁士さん、ありがとうございました。
VB6で出来て、.NETでは複雑になるんですね・・・
とても勉強になりました。
OLEオブジェクトの部分だけ、VB6でやることにします。
それが一番無難そうなので・・・
どうもありがとうございました。