none
[Access + VB.NET]如何從Access讀出圖片讓Picturebox顯示? RRS feed

  • 問題

  •  

    各位老師好

     

    我有一個Access資料庫 DB1

    一個資料表tb1

    兩個欄位

    欄位1: No (自動編號)

    欄位2: PIC(OLE)

     

    我該怎麼從PIC欄位讀出二進制資料轉變為Image型別給Picturebox顯示?

     

    謝謝各位老師


    2009年1月6日 上午 05:33

解答

所有回覆

  • HI,

     

    VB2005有能力直接顯示OLE格式的PICTURE欄位, 用PictureBox或是用DataGridView的欄位顯示皆可, 如果要寫程式控制, 可以參考以下的範例:

    http://www.vbdotnetforums.com/winforms-data-access/69-load-bitmap-ole-object-access-visual-basic-net-form.html

     

    tihs

    2009年1月6日 上午 05:59
  • 用 oledbcommand 把資料 select 到 oledbdatareader, 直接 get 那個欄位的 value 出來就是 byte array,
    再轉成 bitmap 即可
    2009年1月8日 上午 05:29
  • 參考一下


            Using cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb")

                cn.Open()

                Dim cmd As New OleDb.OleDbCommand("Select PIC From tb1 WHERE [No] = 1", cn)

                Using drd As OleDb.OleDbDataReader = cmd.ExecuteReader

                    If drd.Read Then

                        Dim buffer() As Byte = drd.GetValue(0)

                        Dim stm As New IO.MemoryStream(buffer)
                        Me.PictureBox1.Image = Image.FromStream(stm)

                    End If

                End Using

            End Using

    2009年1月8日 下午 06:28
  •  

    ed0507 老師

     

    在Dim buffer() As Byte - drd.GetValue(0) 這一行出現

     

    無法將型別 'System.Int32' 的物件轉換為型別 'System.Byte[]'。

     

    的錯誤訊息

     

    為什麼呢?

     

     

    謝謝老師

    2009年1月9日 上午 12:50
  •  

    一、不要叫我老師啦, 這站上還有很多我的老師和前輩.

    二、你看一下我的 SQL 語法, 我是下 SELECT PIC From tb1.....所以...我用 DataReader(drd).GetValue(0) 是得到 Byte().....

           你會出現錯誤....應該是 你下 SELECT No, PIC From tb1.....所以.....你得到的是 int 的值....查查看是不是這個錯誤

    2009年1月9日 上午 04:25
  •  

    ed0507 阿大

    我如果下 Select PIC From tb1的話

     

    它會在 Me.PictureBox1.Image = Image.FromStream(stm)   的地方出現 "參數無效"的錯誤訊息

     

     

     

    謝謝
    2009年1月9日 上午 06:43
  • 你檢查一下你的 ConnectionString, 若沒有問題, 你把你的程式碼貼上來看看, 因為這個程式我試是OK的

    2009年1月9日 上午 06:47
  • Code Snippet

     

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Application.Info.DirectoryPath &    "/DB_Pic_Test.mdb"
            conn.Open()
        End Sub

     

     

        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

                Using cm2 As New OleDb.OleDbCommand("select PIC from tb1 where No =" & Num, conn)
                    Using rd2 As OleDb.OleDbDataReader = cm2.ExecuteReader
                        If rd2.Read Then
                            Dim buffer() As Byte = rd2.GetValue(0)
                            Dim stm As New IO.MemoryStream(buffer)
                            Me.PictureBox2.Image = Image.FromStream(stm)
                        End If
                    End Using
                End Using

    End Sub

     

     

     

    謝謝
    2009年1月9日 上午 06:53
  •  

    你的 SQL 語法, select PIC from tb1 where No, 請改成 select PIC from tb1 where [No]

    請君個中括號再試

    2009年1月9日 上午 06:58
  •  

    ed0507 大

     

    加了中括號後是沒有錯誤訊息

     

    可是程式都沒有動靜,Picturebox2也沒變化,沒有跑圖出來

     

    謝謝

    2009年1月12日 上午 07:20
  •  

    你的 SQL 語法是 "Where [No] = " & Num, 你Num 帶的號碼, 要去資料庫檢查看看是不是有圖, 有圖的話也得確認一下格式, 這個範例我執行過, 確認可以執行我才貼出來, 請檢查一下. 因為你的資料庫和環境和我並不相同.
    2009年1月12日 上午 07:31