VisualBasic2010のPictureBoxにAccessの画像データを表示させたい

このQ&Aのポイント
  • VisualBasic2010のPictureBoxにAccessの画像データを表示させる方法を教えてください。
  • MSAccess2007をデータベースとして利用して、VB2010でプログラミングをしていますが、画像データの表示について困っています。
  • 具体的なやり方や使用するデータ型など、ご教授いただければ幸いです。
回答を見る
  • ベストアンサー

VisualBasic2010のPictureBoxにAccessの画

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

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

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?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=ja
edrag
質問者

補足

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

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

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

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

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

edrag
質問者

補足

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

関連するQ&A

  • VisualBasic2008を使い、画像のドラッグ&ドロップをしたい

    VisualBasic2008を使い、画像のドラッグ&ドロップをしたい まだVB2008の勉強を始めたばかりの初心者です。 PictureBox1~PictureBox4に表示されている画像をドラッグ&ドロップでPictureBox5にコピーして表示させたいのですが、どのようなプログラムにすればいいのかが分かりません。 PictureBox5には何度でもPictureBox1~PictureBox4の画像をドラッグ&ドロップで入れ替えができ、PictureBox1~PictureBox4の画像はそのままになるようにしたいです。 よろしくお願いします。

  • ExcelのグラフをPictureBoxに貼付

    下記のサイトの http://hanatyan.sakura.ne.jp/dotnet/index.html ●VB.NETからExcel にデータを送りグラフを表示する ●Excelのグラフをクリップボード経由でPictureBoxに貼付 を組み合わせたものを作りたいのですが、ソースコードが実行できなくて困っています。 エクセルでグラフを作成までは、エラーもなく、実行できたのですが、貼り付けができません。どうも、 If iData.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap) Then PictureBox1.Image = CType(iData.GetData(DataFormats.Bitmap), Image) Else End If でElseの方にいってしまっているみたいです。 ですが、確認したところ、クリップボードにはBitmapの画像はあるみたいです。 (プログラムが終了した後、ペイントに貼り付けてみました。) 環境は、VB2005、Excel2007です。 よろしくお願いします。 もし、動作確認できましたら、どこかにサンプルプログラムをUPしてもらえると非常に助かるのですが

  • vb2003.netでpicturebox に画像を表示させるにはどう

    vb2003.netでpicturebox に画像を表示させるにはどう vb2003.netでpicturebox に画像を表示させるにはどうするのですか。 picturebox に画像を表示させるにはどうするのですか。 momo1.jpgの画像を一度変数gaに記録してからpictureboxに表示させようとしました。 うまくいきません。どこが間違っているのでしょうか。pictureboxのプロパティーもいろいろ変更しましたが結局はだめでした。 Module Module1    Public ga As String End Module Public Class Form1 Inherits System.Windows.Forms.Form     ga = "momo1.jpg"     PictureBox1.Image = System.Drawing.Image.FromFile("c:\vbnet\cai\ga") End Sub End Class 投稿日時 - 2010-09-17 20:40:44

  • vc++ 2005 Pictureboxの透過処理

    お世話になります。 VC 2005で開発しているC++で教えていただきたい事が有ります。 PictureboxBの上にPictureboxAを透過率50%位で重ねて表示したいのですが、 Pictureboxのプロパティ等で一括で指定できないでしょうか? 出来ない場合、画像を一括で透過処理する方法が有りましたら教えていただけないでしょうか ※ ググって、単色を透過するのは、色々見つけたのですが、画像全体を透過する方法を見つけることが出来ませんでした。 現状は単純にファイル(写真)を読み込んで、PictureboxのImageに格納しているだけです。 ※将来的には、PictureboxAをドラッグで移動させたいので、背景画像(PictureboxB)との位相を取る方法以外でお願いいたします。 Bitmap^ PhotBMP = gcnew Bitmap(filename); // この間にサイズ変更&位置合わせの処理が有りますが、記載を省略させていただいております。 PictureboxA->Image = PhotBMP;

  • VB.NETでのPictureBoxによる画像保存について

    またお世話になります。 VB.NETでプログラムでPictureBoxに絵を描かせているのですが、そこまでは表示させることができました。このできた画像をBitmapなりjpegなりに保存させて、ほかの画像ビューワ等でも見れる形にしたいのですがうまくいきません。 ちなみに今はこのように書いて、 Dim gra1 As Graphics = PictureBox1.CreateGraphics FileOpen(2, myfile2, OpenMode.Output) (絵を描かせるプログラム) PictureBox1.Image.Save(myfile2, System.Drawing.Imaging.ImageFormat.Bmp) FileClose(2) としてまわしたところ、 System.Runtime.InteropServices.ExternalException' のハンドルされていない例外が system.drawing.dll で発生しました。 追加情報 : GDI+ で一般的なエラーが発生しました。 といわれました。 どなたかご教授いただけたらお願いしますm(__)m

  • C# Picturebox 縮小・拡大時の表示方法

    下記のようなコードで、画像の拡大・縮小を行っています。 ただ画像の縮小時、PictureBox内の余分な部分について、(1)縮小前の 画像が残像のように表示されています。 また通常、画像の拡大・縮小前の画像では画像サイズがPictureBoxよりも大きいサイズの 場合、スクロールバーを表示するようにしています。 (2)でも、画像拡大時、スクロールバーが出るには出ているのですが、画像全てを 確認できません。 (1)、(2)の問題について、解決方法をご存知の方、お願いです、、、教えてください。。。 かなり、困ってます。。。。 Bitmap img = new Bitmap(pictureBox1.Image.Tag.ToString()); //PictureBox1のGraphicsオブジェクトの作成 Graphics g = pictureBox1.CreateGraphics(); //拡大・もしくは縮小 RectangleF rect = new RectangleF(0, 0, zoom * img.Width, zoom * img.Height); g.DrawImage(img, rect); //BitmapとGraphicsオブジェクトを破棄 img.Dispose(); g.Dispose();

  • pictureboxの画像を削除するには?

    Visual C# 2008を使用しています。 ボタンを押すとpictureboxに画像が表示されるプログラムを作成しました。 今度は、その表示された画像をクリックし、別のボタンを押すことでその画像が削除できるようにしたいと思っているのですが、うまくプログラムできません。 誰か教えていただけないでしょうか? ソースコードは以下のようになっています。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace algorithm { public partial class Form1 : Form { int space = 10; public Form1() { InitializeComponent(); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void kihonsyori_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\基本処理箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 50; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void groupBox1_Enter(object sender, EventArgs e) { } private void pictureBox1_Click(object sender, EventArgs e) { } private void hanpuku_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\反復箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 80; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void sentaku_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\選択箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 80; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void sakujyo_Click(object sender, EventArgs e) { pictureBox1.Image = null; space = 0; } } }

  • pictureboxのイメージ出力処理で

    VB.NETを使用しています。 Form上にpicturebox1~picturebox10まで配置しています。 下記の関数の引数aにきた値により1~10のどのpictureboxに画像を出力するか処理をわける方法をどなたかアドバイスお願いします。 現在はselect文を使用して処理しています。 for文などでまとめることはできませんでしょうか? Private Sub Test(ByVal a As String) ※この中でaに1がくるとpiturebox1.Image = 画像 aに10がくるとpicturebox10.image = 画像 という処理をしたい。 このように→picturebox & "a" & ".image" = 画像 End Sub 宜しくお願いします。

  • PictureBoxの描画について

    VB2005を使用してPictureBoxに線を描きました。  Dim g As Graphics = PictureBox1.CreateGraphics()  g.DrawLine(p, X1, Y1, X2, Y2) 線は上手く描けたのですが、表示している画面(Form)を最小化して再度最大化すると、描いた線が消えてしまいます。FormをHideしてもう一度Showしても同じです。 この描画を消さないようにするには、どうすればよいでしょうか?

  • VBのPictureBoxで画像をドラッグして表示範囲を移動したい

    お世話になります。 VB.netのPictureBoxに画像を貼り付け表示しているのですが、 PictureBoxよりも大きい画像を表示した際にスクロールバーで表示範囲の移動はできるのですが、 これをスクロールバーではなくマウスをドラッグして表示範囲の移動をしたいのです。 どのようにすればできますか? よろしくお願いします。