Hallo Forum, ich muss nochmal stören Ist zwar ein etwas längerer Beitrag, aber nur damit ich das auch möglichst umfassend erkläre, was ich möchte....
Ich habe versucht, den Tipp von Melkor umzusetzen, bin dabei aber glaub ich an meine Grenzen gestossen...
Hier mal der Ablauf, wie der code sich bei mir verhält:
Die Access-DB: Feld Cover, Datentyp OLE-Object
Starte ich mein Prog und klicke auf einen Button, wird als erstes ein eigener Datentyp erzeugt:
Public Structure MP3File
Public _DateiID As Long
...
Public _Cover As Byte
End Structure Dann lese ich in einer Funktion die Werte für den Datentyp MP3File ein...
With tmpMP3
...
._Cover = SavePicTmp(m_UltraID3) ' Hier tritt der Fehler auf
...
End With Die Funktion SavePicTmp() sieht bei mir so aus:
Public Function SavePicTmp(ByVal DateiName As UltraID3)
m_PictureFrames = DateiName.ID3v23Tag.Frames.GetFrames( _
MultipleInstanceFrameTypes.Picture)
m_PictureTypes = _
HundredMilesSoftware.UltraID3Lib.ID3PictureFrame.PictureTypeList
m_PictureIndex = -1
If m_PictureFrames.Count > 0 Then
m_PictureIndex = 0
End If
Dim PictureFrameCount As Integer = m_PictureFrames.Count
If PictureFrameCount > 0 Then
m_CurrentPictureFrame = CType(m_PictureFrames.Item(m_PictureIndex), _
ID3PictureFrame)
With m_CurrentPictureFrame
If m_CurrentPictureFrame.Picture IsNot Nothing Then
m_CurrentPictureFrame.Picture.Save("c:\picTmp.jpg")
End If
End With
End If
Dim myfilelength As Int64
Dim fs As FileStream = New FileStream( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments & _
"\picTmp.jpg", FileMode.Open)
Try
myfilelength = fs.Length
ReDim Puffer(myfilelength - 1)
fs.Read(Puffer, 0, myfilelength)
fs.Close()
Catch ex As Exception
fs.Close()
Finally
fs.Close()
End Try
Return Puffer
End Function Das Bild wird auch korrekt an der angegebenen Stelle abgespeichert.
Jetzt kommt aber der Rückgabewert Puffer, der im Debugger diesen Inhalt hat (auszugsweise):
?puffer
{Length=22515}
(0): 255
(1): 216
(2): 255
....
(98): 6
(99): 7
< Erweitert... (Die ersten 100 von 22515 Elementen werden angezeigt.) > Der Inhalt verträgt sich aber nicht mit dem Feldtyp Byte aus tmpMP3._Cover (oben Fett markiert)
Welchen Datentyp muss ich dort verwenden, damit ich den Wert anschliessend in einer DB speichern kann?
Die Funktion die das speichern übernehmen soll, sieht so aus: (übernimmt als Parameter den Structure-Datensatz tmpMP3, die SQL-Befehle sind verkürzt dargestellt)
Public Sub InsertNewRecord(ByVal tmpMP3 As MP3File)
Dim strSQL As String = "Insert Into TDatei (KatID,Cover) Values(?,?)"
MyConn = New OleDbConnection(connString)
Try
MyConn.Open()
Dim Cmd As New OleDbCommand(strSQL, MyConn)
With Cmd
.Parameters.Add(New OleDbParameter("@KatID", OleDbType.Integer))
' Ist das so korrekt mit .Binary???
.Parameters.Add(New OleDbParameter("@Cover", OleDbType.Binary))
End With
Cmd.Parameters(0).Value = Rec._KatID
Cmd.Parameters(1).Value = Rec._Cover
Cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox("Fehler" & vbCrLf & ex.Message)
Finally
MyConn.Close()
End Try
End Sub Ich bin ja wirklich nicht lernfaul, und gegoogelt hab ich auch schon jede Menge, aber irgendwie fehlt mir das Verständnis für die Binären Datentypen und deren Konvertierung
Wär wirklich superklasse, wenn mir jemand helfen könnte...
LG Micha |