Ich habe diese Stunden lang gehämmert, aber habe es nicht richtig verstanden, also habe ich beschlossen, zu posten.Vb.NET MS Access SQL AKTUALISIEREN Syntax Ausgabe
Meine Vb.NET App hat 2 Jpgs auf der Festplatte. Einer ist LowRes
und der andere ist HighRes
. Ich möchte beide Bilder in dem gleichen Datensatz in einer Microsoft Access 2007-Datenbank über INSERT
speichern, die einwandfrei funktioniert, und dann UPDATE
, um den zweiten hinzuzufügen. Die UPDATE
funktioniert nicht.
Ich habe einen Haufen Code zusammengefügt, den ich online für den INSERT
Code gefunden habe (so wie ich es gelernt habe) und irgendwann herausgefunden, dass das tatsächlich funktioniert hat. Es ist jedoch schwierig, die Funktion zu optimieren, um ein UPDATE durchzuführen, um das zweite Bild hinzuzufügen. Ich vermute, dass es etwas damit zu tun hat, Parameter falsch anzugeben?
Die Datenbank verfügt über 1 Tabelle Records
mit 3 Spalten RecordID
(der Text ist, und einen Autowert Primärschlüssel, die von Form1.Tb_RecordID.Text
gezogen wird), HighRes
(die OLE) zur Verfügung und LowRes
(Welche OLE ist auch). Die Datenbank heißt Database.accdb
.
Ich nenne das Unterprogramm mit:
Save_To_Database("LowProfile.jpg", "LowRes")
wenn ich es INSERT
ein OLE-Bild in dem "LowRes" -Spalte will. Ich nenne dann
Update_To_Database("HighProfile.jpg", "HighRes")
den Datensatz mit dem HighRes
Bild zu aktualisieren. Ich möchte schließlich diese Funktionen eins zu eins konsolidieren und ByVals verwenden, um festzustellen, ob es Aktualisieren oder Einfügen sollte.
Dies funktioniert:
Sub Save_To_Database(ByVal Filename As String, ByVal Res As String)
Dim cnString As String = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb"
Dim theQuery As String = "INSERT INTO Records([RecordID],[" & Res & "]) values (" & Form1.Tb_RecordID.Text & ", @Img)"
Try
Dim fs As FileStream
fs = New FileStream(Filename, FileMode.Open, FileAccess.Read)
Dim picByte As Byte() = New Byte(fs.Length - 1) {}
fs.Read(picByte, 0, System.Convert.ToInt32(fs.Length))
fs.Close()
Dim CN As New OleDbConnection(cnString)
CN.Open()
Dim imgParam As New OleDbParameter()
imgParam.OleDbType = OleDbType.Binary
imgParam.ParameterName = "Img"
imgParam.Value = picByte
Dim cmd As New OleDbCommand(theQuery, CN)
cmd.Parameters.Add(imgParam)
cmd.ExecuteNonQuery()
MessageBox.Show("Image successfully saved.")
cmd.Dispose()
CN.Close()
CN.Dispose()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
jedoch mein UPDATE
Code schlägt mit Syntaxfehler auf der SQL-Anweisung:
Sub Update_To_Database(ByVal Filename As String, ByVal Res As String)
Dim cnString As String = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb"
Dim theQuery As String = "UPDATE Records SET ([" & Res & "]) values (@Img) WHERE RecordID =" & Form1.Tb_RecordID.Text
MsgBox(theQuery)
Try
Dim fs As FileStream
fs = New FileStream(Filename, FileMode.Open, FileAccess.Read)
Dim picByte As Byte() = New Byte(fs.Length - 1) {}
fs.Read(picByte, 0, System.Convert.ToInt32(fs.Length))
fs.Close()
Dim CN As New OleDbConnection(cnString)
CN.Open()
Dim imgParam As New OleDbParameter()
imgParam.OleDbType = OleDbType.Binary
imgParam.ParameterName = "Img"
imgParam.Value = picByte
Dim cmd As New OleDbCommand(theQuery, CN)
cmd.Parameters.Add(imgParam)
cmd.ExecuteNonQuery()
MessageBox.Show("Image successfully saved.")
cmd.Dispose()
CN.Close()
CN.Dispose()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Wer das Problem? Oder eine Möglichkeit, den Code zu verbessern?
Verwendung so etwas wie dieses 'UPDATE Aufzeichnungen SET ([ "& Res &"]) = @Img WHERE' – Abhay
ich diesen Thread gefunden: Tinyurl.com/hkjwtwz und mag wirklich, wie er structued seine SQL und sogar, wie es prüft, ob der Datensatz existiert. Ich versuche, es zu ändern, um so etwas zu tun, aber ich weiß nicht, was mit imgParam oder fs zu tun ist. –
Auch Abhay. Es wirft immer noch einen Syntaxfehler auf. Ich habe eine Msgbox gemacht, um den String zu sehen und er sagt: "UPDATE Records SET ([HighRes]) = @img WHERE RecordID = 1" wenn das hilft. –