Hallo, habe das Ganze mal so gelöst, als ich vor einem ähnlichen Problem stand.
Keine Garantie auf Vollständigkeit. Der Code ist aus mehreren Beispielen zusammen gefriemelt.
Name der Accessdatenbank: Datenbank.mdb
Pfadangabe: D:\TEMP\Datenbank.mdb
Tabellenname: tblBild
Spalten in tblBild: LNr -> Felddatentyp AutoWert
Bild -> Felddatentyp OLE-Objekt
Das Bild wird als Long binary-Daten in Bild eingefügt
Deshalb auch etwas zum Auslesen aus der Datenbank.
Auf der Form befindet sich:
PictureBox1
Button bntStop
Button Bild_Speichern
Button Bild_Aus_DB_Laden
Sollte das Ganze besser gehen, bitte auch eine kurze Info an mich.
Imports System.IO
Imports System.Drawing.Imaging
Imports System.Collections
Imports System.Data.OleDb
Public Class Form1
Inherits System.Windows.Forms.Form
Dim Puffer() As Byte = Nothing
Dim conStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _
"D:\TEMP\Datenbank.mdb;"
#Region " Vom Windows Form Designer generierter Code "
Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnStop.Click
Me.Close()
End Sub
Private Sub Bild_Speichern_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Bild_Speichern.Click
Dim sFilenameOriginal As String
Dim sFilenameNew As String
Dim img As Image
If Me.OpenFileDialog1.ShowDialog() = DialogResult.OK Then
sFilenameOriginal = Me.OpenFileDialog1.FileName
img = Image.FromFile(sFilenameOriginal)
sFilenameNew = sFilenameOriginal.Replace("bmp", "jpg") 'bmp
' ersetzen durch jpg
img.Save(sFilenameNew, ImageFormat.Jpeg)
End If
'Bild Anzeigen in PictureBox1
img = Grafik_aus_Datei_laden(sFilenameNew)
PictureBox1.Image = img
Dim LeerArray() As Byte = {}
Dim SQL_String As String = "UPDATE tblBild SET Bild = @bild WHERE LNr =" & _
"1;" ' Laufende Nummer in der tblBild
' Oder Vielleicht mit INSERT INTO tblBild....
Dim con As OleDbConnection
Try
con = New OleDbConnection(conStr)
Dim cmd = New OleDbCommand(SQL_String, con)
If Puffer Is Nothing Then
cmd.Parameters.Add("@bild", OleDbType.Binary).Value = LeerArray _
'Puffer in DB schreiben
Else
cmd.Parameters.Add("@bild", OleDbType.Binary).Value = Puffer _
'Puffer in DB schreiben
End If
con.Open()
cmd.ExecuteNonQuery()
con.Close()
Catch ex As Exception
con.Close()
MessageBox.Show(ex.ToString, "Info")
End Try
End Sub
Private Function Grafik_aus_Datei_laden(ByVal Pfadangabe As String) As Image
'Pfadangabe = "B:\test.bmp"
Dim myFileLength As Integer
Dim fs As FileStream
Try
fs = New FileStream(Pfadangabe, FileMode.Open)
myFileLength = CInt(fs.Length)
ReDim Puffer(myFileLength - 1)
fs.Read(Puffer, 0, myFileLength)
Dim bild As Bitmap = New Bitmap(New MemoryStream(Puffer))
Return bild
fs.Close()
Catch ex As Exception
'fs.Close()
MessageBox.Show(ex.ToString, "info", MessageBoxButtons.OK, _
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, _
MessageBoxOptions.DefaultDesktopOnly)
End Try
End Function
Private Sub Bild_Aus_DB_Laden_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles Bild_Aus_DB_Laden.Click
PictureBox1.Image = Nothing
Dim con As New OleDbConnection(conStr)
Dim da As New OleDbDataAdapter("SELECT * FROM tblBild WHERE LNr = 1;", _
con)
Dim ds As New DataSet
da.Fill(ds, "tblBild")
Dim dt As DataTable = ds.Tables("tblBild")
If dt.Rows.Count = 0 Then
MessageBox.Show("Kein Bild gefunden")
Else
Dim Bytes As Byte()
Bytes = CType(dt.Rows(0)("Bild"), Byte())
PictureBox1.Image = New Bitmap(New MemoryStream(Bytes))
End If
End Sub
End ClassHoffe geholfen zu haben
MfG
Uli |