Ich bekomme folgendes Problem beim Einlesen von Binärdateien (Bilder aus SQL Datenbank)
Das einlesen funktioniert eigentlich einwandfrei, nur wenn es zu viele Bilder sind kommt bvesagter Fehler.
Der Code sieht folgendermaßen aus:
Sub BildErstellung(strJPGFile, strBilderID)
Dim rcs As DAO.Recordset, jpg() As Byte, i As Long
Set rcs = CurrentDb.OpenRecordset("SELECT * FROM dbo_Bilder WHERE [BilderID]=" & strBilderID, dbOpenDynaset, dbSeeChanges)
If rcs.NoMatch Then
MsgBox "Ein Bild mit dieser Nummer ist nicht in der Datenbank vorhanden."
Else
On Error GoTo FormfeldTitel_Err
Open strJPGFile For Binary As #1
ReDim jpg(rcs("Bild").FieldSize)
************************************************** ***************
Hier bleibt Access stehen mit Laufzeitfehler 7 Zu wenig Speicher
jpg() = rcs("Bild").GetChunk(0, rcs("Bild").FieldSize)
************************************************** ***************
Put #1, , jpg
FormfeldTitel_Exit:
Close #1
End If
rcs.Close
Ende:
Erase jpg
Set rcs = Nothing
Exit Sub
Fehler:
Reset
MsgBox Err.Description
Resume Ende
FormfeldTitel_Err:
If Err.Number = 7 Then
MsgBox Err.Number & vbNewLine & Err.Description
End If
Resume FormfeldTitel_Exit
End Sub
Ereignis im Bericht
__________________________________________________ ___________
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
Dim DatenbankPfad As String
Dim TempBild As String
DatenbankPfad = "D:\tmpAccessBilder"
If Not (Me.BilderID) = 0 Then
TempBild = DatenbankPfad & "/tmp" & Trim(Str(Me.BilderID)) & ".jpg"
BildErstellung TempBild, Me.BilderID
On Error GoTo Bilddeaktivieren
Me.BinaerJPG.Picture = TempBild
Me.BinaerJPG.Visible = True
Else
Bilddeaktivieren:
Me.BinaerJPG.Picture = ""
Me.BinaerJPG.Visible = False
Exit Sub
End If
End Sub
Gibt es eine Möglichkeit das Einlesen anders zu gestalten damit der Speicher nicht an seine Grenzen kommt.
Wenn die Meldung Laufzeitfehler 7 kommt sind im Taskmanager knapp 2 GByte verbraten.
Danke für Eure Hilfe
Gruß
Pebbles
Das einlesen funktioniert eigentlich einwandfrei, nur wenn es zu viele Bilder sind kommt bvesagter Fehler.
Der Code sieht folgendermaßen aus:
Sub BildErstellung(strJPGFile, strBilderID)
Dim rcs As DAO.Recordset, jpg() As Byte, i As Long
Set rcs = CurrentDb.OpenRecordset("SELECT * FROM dbo_Bilder WHERE [BilderID]=" & strBilderID, dbOpenDynaset, dbSeeChanges)
If rcs.NoMatch Then
MsgBox "Ein Bild mit dieser Nummer ist nicht in der Datenbank vorhanden."
Else
On Error GoTo FormfeldTitel_Err
Open strJPGFile For Binary As #1
ReDim jpg(rcs("Bild").FieldSize)
************************************************** ***************
Hier bleibt Access stehen mit Laufzeitfehler 7 Zu wenig Speicher
jpg() = rcs("Bild").GetChunk(0, rcs("Bild").FieldSize)
************************************************** ***************
Put #1, , jpg
FormfeldTitel_Exit:
Close #1
End If
rcs.Close
Ende:
Erase jpg
Set rcs = Nothing
Exit Sub
Fehler:
Reset
MsgBox Err.Description
Resume Ende
FormfeldTitel_Err:
If Err.Number = 7 Then
MsgBox Err.Number & vbNewLine & Err.Description
End If
Resume FormfeldTitel_Exit
End Sub
Ereignis im Bericht
__________________________________________________ ___________
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
Dim DatenbankPfad As String
Dim TempBild As String
DatenbankPfad = "D:\tmpAccessBilder"
If Not (Me.BilderID) = 0 Then
TempBild = DatenbankPfad & "/tmp" & Trim(Str(Me.BilderID)) & ".jpg"
BildErstellung TempBild, Me.BilderID
On Error GoTo Bilddeaktivieren
Me.BinaerJPG.Picture = TempBild
Me.BinaerJPG.Visible = True
Else
Bilddeaktivieren:
Me.BinaerJPG.Picture = ""
Me.BinaerJPG.Visible = False
Exit Sub
End If
End Sub
Gibt es eine Möglichkeit das Einlesen anders zu gestalten damit der Speicher nicht an seine Grenzen kommt.
Wenn die Meldung Laufzeitfehler 7 kommt sind im Taskmanager knapp 2 GByte verbraten.
Danke für Eure Hilfe
Gruß
Pebbles
Comment