プロが教える店舗&オフィスのセキュリティ対策術

VisualBasic2010のPictureBoxにAccessの画像データを表示させたい。
MSAccess2007をデータベースとして利用して、VB2010を端末としてプログラミングを行っていますが、行き詰ってしまったのでお聞きします。
DBに記録された画像データ(jpgかBitmap)を抽出してVBの画面に表示させたいのです。
やり方としては、添付ファイル型で記録されたデータをPictureBoxに表示させようと考えています。
このとき、OleDbのDatasetからPictureBoxか、あるいは構造体に格納したいのですが、やり方がわかりません・・・。文字列や数値データは普通に検索・更新・削除ができるのですが、画像データの操作がわからないのです。
そもそも添付ファイル型を使用せず、OLEオブジェクト型を使用したらよいのでしょうか??
ご教授願います。

A 回答 (3件)

Access2007からは添付ファイル型というのがあるのですね


一旦ファイルに落として、PictureBoxにLoadするのではダメでしょうか?
OLE型は非公開のヘッダーがついていてファイル取り出し不能?と言われていたので、
それに比べると保存できるだけ良いのではないでしょうか。
試みに、xl2000でAccess2010のデータベースを読んで、添付ファイル型からファイルを保存してみました。
(Access2010を入手しましたが、まだほとんど使っておりません。)
何かの足しになれば幸いです。

'Microsoft Office 14.0 Access database engine Object Libraryを
'ダウンロード&インストール&参照設定要
Sub test()
Dim dbWS As DAO.Workspace
Dim dbWB As DAO.Database
Dim dbRes As DAO.Recordset
Dim myFiles As DAO.Recordset

Set dbWS = DAO.DBEngine.Workspaces(0)
Set dbWB = dbWS.OpenDatabase(ThisWorkbook.Path & "\" & "Database1.accdb")
Set dbRes = dbWB.OpenRecordset("T_my1st", dbOpenDynaset)

dbRes.MoveFirst
Do Until dbRes.EOF
With dbRes.Fields("attachedFile").Value
Set myFiles = dbRes.Fields("attachedFile").Value
Do Until myFiles.EOF
myFiles.Fields("filedata").SaveToFile ThisWorkbook.Path & "\" & myFiles.Fields("filename").Value
myFiles.MoveNext
Loop
dbRes.MoveNext
End With
Loop
dbRes.Close
dbWB.Close
dbWS.Close
End Sub

参考URL:http://www.microsoft.com/downloads/details.aspx? …

この回答への補足

ご回答ありがとうございました。やはり添付ファイル型の方がいいのですね。
ご回答にありましたプログラムですが、DAOですよね?VB2010でのDB接続はADO.NETなのでRecordsetを使用することはできません。ADOでは、Datasetでフィールドへのアクセスが可能になります。しかしながら、フィールドの"Value"のようなプロパティがないのです。この添付ファイル型のフィールドに格納された値は、String型で画像のファイル名だけでした。
mitarashiさんのプログラムにある、
>dbRes.Fields("attachedFile").Value
のような、フィールドに付随するオブジェクトをADO.NETのDatasetで抽出できればいいのですが。。。

補足日時:2010/10/21 23:07
    • good
    • 0

#1です。


VBAでもインテリセンスで、SaveToFileはメンバとして表示されませんでしたが、WEBからみつけてきた通りに打ち込んでみると動作いたしました。
もし、そういう意味で無く、実際に動作しなかったという場合は、当方では検証できません(環境も、それ以上に知恵もないので)あしからず。
    • good
    • 0

#1です。


当方の理解では、DAOの方は「Microsoft Office 14.0 Access database engine Object Library」と、名前の通りAccessのデータベースエンジンであり、ADOの方は、各種データベースとやりとりする為のインターフェースなので、後者で出来る事は自ずと限界があるのではないかと思います。VB2003の頃にちょこっと触れただけで、いわゆるVB.NETの知識は無いに等しいですが、VBA同様参照設定すればDAOが使えるのではないかと思い投稿させていただきました。

この回答への補足

早速のご回答ありがとうございました。
早速のご回答ありがとうございました。
この添付ファイル型データの取得部分だけ、DAOで作成してみました。
DAOも使えるんですね。勉強不足でした。。。
しかしながら、添付ファイルが入っているValueのRecordsetのメソッドで、
SaveToFileといったものがありますが、これは何を参照設定で読み込んだらよろしいのでしょうか?
「Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント」もインストールしたのですが、
このSaveToFileだけ使えないようです。(様々なサイトで掲載されているサンプルコードでは使えるようですが・・・)
よろしければ教えてください。。

補足日時:2010/10/22 15:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!