PDA

Vollständige Version anzeigen : Hilfe! Long binary - dateien in Bericht wieder anzeigen


Simon84
03.05.2011, 15:55
Hallo zusammen,

Kämpfe schon seit 1 Tag an oben genanntem Problem, ohne auf einen grünen Zweig zu kommen.
Grundlage meines Vorhabens ist das Formular "Pix2" aus Sascha Trowitzsch's Beispiel MDB für Bildverwaltung (und dessen Module).
Ich würde gerne Bilder, die als Binärdaten in der Tabelle "Bilder" hinterlegt sind, in einem Bericht darstellen...
Meine Überlegung war folgende:
1. Binärdaten in Zwischenspeicher laden (in Arry laden)
2. Über Modul 'mdlArrayToStdPicture' aus Byte-Arry ein OLE Bild erzeugen
3. Dieses OLE Bild einem Steuerelement? zuweisen

Was ich auch versuche, nichts will klappen, Fehler über Fehler... :( :( :(

Hier mal der Code, der beim Formatieren des Berichts ausgefphrt wird:

Option Compare Database
Option Explicit


Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)

Me.Caption = "Bilder in Access, Version 2 / " & Me!BildName 'Titelzeile
If Not IsNull(Me!BildName) Then BildAnzeigen = CreatePix 'siehe folgende Function
End Sub


Private Function CreatePix() As StdPicture
Dim pix() As Byte, lSize As Long
On Error GoTo Fehler
lSize = idBild.FieldSize
ReDim pix(lSize)
pix() = idBild.GetChunk(0, lSize) 'Binärdaten in Arry laden
Set CreatePix = BytesToPicture(pix) 'Siehe Funktion im Modul mdlArrayToStdPicture
If CreatePix Is Nothing Then MsgBox sError, vbExclamation, "OLE-Fehler" 'Das passiert bei nicht unterstützten Bildformaten


Ende:
Erase pix
Exit Function
Fehler:
MsgBox Err.Description
Resume Ende
End Function



Bitte helft mir weiter, ich blicke gar nichts mehr.

wb_3001
06.05.2011, 11:54
Hallo Simon84!

Ich will jetzt nicht klug daherreden, aber wenn Du schon den Dateinamen der Bilddatei kennst,
warum zeigst Du das Bild über den Umweg eines Long Binary Feldes an?

Da gibt es einfachere Lösungen:

Verwende im Formular "PIX2" ein Bild-Steuerelement mit Namen "Bild_verknüpft".

Im Ereignis "Beim Anzeigen" brauchst Du

Private Sub Form_Current()
If Nz(Dateiname.Value, 0) <> 0 Then
Bild_aktualisieren Dateiname.Value
Else
lblDateiNichtgefunden.Visible = True
Bild_verknüpft.Visible = False
End If
End Sub

Dann ein Sub in einem Modul
'
' Bildsteuerelement aktualisieren
'
Private Sub Bild_aktualisieren(ByVal Bilddateiname As String)
If FileExists(Bilddateiname) Then
lblDateiNichtgefunden.Visible = False
Bild_verknüpft.Visible = True
Bild_verknüpft.Picture = Bilddateiname
DoEvents
Else
lblDateiNichtgefunden.Visible = True
Bild_verknüpft.Visible = False
End If
End Sub

Function FileExists(ByVal FileName As String) As Integer
'Unter Benützung des Objekts Scripting.FileSystemObject
Dim fso As FileSystemObject

Set fso = CreateObject("Scripting.FileSystemObject")
FileExists = fso.FileExists(FileName)
Set fso = Nothing
End Function


Wobei Bilddateiname Dein Bildname aus der Tabelle Bilder stammt.
Einfügen mußt Du den Dateinamen (am besten mittels eines Filedialoges).

Es gibt auch die Möglichkeit Bilder mit dem Microsoft Web Browser Control anzuzeigen:

' Web Browser Control aktualisieren
Private Function Bild_aktualisieren(ByVal Bilddateiname As String) As Boolean
If FileExists(Bilddateiname) Then
CtrlWebBrowser.Navigate "about:<html><body scroll='no'>" & _
"<img src=" & Chr$(34) & Bilddateiname & Chr$(34) & _
"></img></body></html>"
DoEvents
setCtlVisible True
Bild_aktualisieren = True
Else
setCtlVisible False
Bild_aktualisieren = False
End If
End Function


Im Bericht "Bilder" formatierst Du das Bild mittels:
In den Bericht ein Bildsteuerelement "Imageframe" einfügen.
Im Ereignis "Beim Formatieren" des Detailbereiches des Berichtes verwendest Du den Code


Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
Me![Imageframe].Picture = Me![Dateiname]
End Sub


Gutes Gelingen.

Wolfgang