Note: Forums will be making significant UX changes to address key usability improvements surrounding search, discoverability and navigation. To learn more about these changes please visit the announcement which can be found HERE.

Beantwortet DB-Operation hängt nach ... in Access

  • Sonntag, 17. März 2013 13:03
     
      Enthält Code

    Hallo Experten,

    ich erstelle ein komplexes Bild per Code auf der Festplatte. Dieses wird dann von der Festplatte mit folgenden Code in eine Access-DB geschrieben.

    Dim oConn As OleDb.OleDbConnection
            Dim oComm As OleDb.OleDbCommand
    
            Dim Err As String
            Dim sInsertQuery As String
            Dim FSO As New System.IO.FileStream(tempPfad & "\msttemp.bmp", IO.FileMode.Open, IO.FileAccess.Read)
            Try
                sInsertQuery = "insert into images([image]) VALUES(?)"
                sInsertQuery = "update prgopt set WertOLE= ? WHERE Bereich1='Programm' AND Bereich2='CCF-MST-Bild' AND Bereich3='Bild'"
                oConn = New OleDb.OleDbConnection(My.Settings.DefaultConnectionString)
                oConn.Open()
                oComm = New OleDb.OleDbCommand(sInsertQuery, oConn)
                Dim imgArrayByte(CType(FSO.Length() - 1, Integer)) As Byte
                FSO.Read(imgArrayByte, 0, imgArrayByte.Length)
                FSO.Close()
    
                Dim QueryParameter As New OleDb.OleDbParameter("@Picture", _
                                                               OleDb.OleDbType.LongVarBinary, _
                                                               imgArrayByte.Length, ParameterDirection.Input, _
                                                               False, 0, 0, Nothing, DataRowVersion.Current, _
                                                               imgArrayByte)
                oComm.Parameters.Add(QueryParameter)
                oComm.ExecuteNonQuery()
               
                ' MsgBox("Bild wurde in der Datenbank erfolgreich gespeichert", MsgBoxStyle.OkOnly, "Erfolgreich gespeichert")
    
            Catch Ex As Exception
                Err = Ex.Message
                MsgBox("Fehler : " & Err, MsgBoxStyle.OkOnly, "Fehler aufgetreten")
            Finally
                oConn = Nothing
                oComm = Nothing
            End Try

    Das funzt soweit einwandfrei ... nur jetzt kommt es ... unmittelbar nach dem Code wird das Bild aus der DB ausgelesen und in einen Seriendruck eingebunden. Nur leider ist da dann kein Bild zu sehen! Schau ich nun in die DB ist das Bild(OLE) aber vorhanden. Bau ich nun im Code eine Pause (z.B. Msgbox -> siehe Code) von ca 3-5 sec ein, ist das Bild da. Eine andere Möglichkeit ist den Befehl oComm.ExecuteNonQuery() 2x direkt hintereinander auszuführen, auch dann ist das Bild dann da. Aber, das kann es ja nicht sein oder ? Wie kann ich sicherstellen, das die DB-Oberation ausgeführt wurde und die Daten auch in der DB zur Verfügung stehen ????

    mfg eem monarch

Alle Antworten

  • Sonntag, 17. März 2013 13:56
    Beantworter
     
     Beantwortet Enthält Code

    Hallo Monarch,

    du solltest die Verbindung schließen... nur tut das ein (überflüssiges) oConn = Nothing nicht.

    Dein Code etwas eingedampft:

            Dim imageData = System.IO.File.ReadAllBytes(Path.Combine(temppfad, "mstemp.bmp"))
            Try
                Using connection As New OleDbConnection(My.Settings.DefaultConnectionString)
                    connection.Open()
                    Dim sInsertQuery = "insert into images([image]) VALUES(?)"
                    'sInsertQuery = "update prgopt set WertOLE= ? WHERE Bereich1='Programm' AND Bereich2='CCF-MST-Bild' AND Bereich3='Bild'"
    
                    Using command As New OleDbCommand(sInsertQuery, connection)
                        command.Parameters.Add("@Picture", OleDbType.LongVarBinary, imageData.Length).Value = imageData
                        command.ExecuteNonQuery()
                    End Using
                End Using
    
                ' MsgBox("Bild wurde in der Datenbank erfolgreich gespeichert", MsgBoxStyle.OkOnly, "Erfolgreich gespeichert")
    
            Catch Ex As Exception
                MessageBox.Show("Fehler : " & Ex.Message, "Fehler aufgetreten")
            End Try
    
    Gruß Elmar
  • Dienstag, 26. März 2013 13:44
    Moderator
     
     

    Hallo monarch,

    Wenn Dir die Antwort von Elmar geholfen hat, dann bitte markiere diese als Antwort.

    Gruss,

    Ionut

  • Donnerstag, 28. März 2013 14:00
    Moderator
     
     

    Hallo Monarch,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Wenn nicht, neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.

    Danke und viele Grüße,
    Ionut