Hallo,
folgendens Problem plagt mich:
Ich habe einen Bericht erstellt mit einem (ungebundenen) Image-Control.
In der Ereignis-Prozedur zu "Beim Laden" des Berichts schreibe ich in die PictureData-Eigenschaft des Image-Controls meine Bilddaten, die ich mir zuvor aus meiner SQL-Server-Datenbank geholt habe.
Das funktioniert gut.
Jetzt binde ich den obigen Bericht als Unterbericht im Bereich Seitenkopf (oder Berichtkopf) in einen anderen Bericht ein und das Bild wird nicht mehr geladen.
Wie kann ich das lösen?
Warum das Ganze? Ich habe etliche Berichte die alle den gleichen Briefkopf (mit Logo aus der Datenbank) erhalten sollen. Füge ich meine Briefkopf-Controls (inkl. dem Bild) in den Seitenkopf eines Berichts ein, funktioniert es wie erwartet. Aber anstelle immer dieselben Controls in jeden Bericht einzufügen will ich mir das Leben mit einem Unterbericht leichter machen...
Herzliches Dankeschön für alle Tipps.
Gruß, Carsten
Moin Carsten,
kannst Du mal kurz zeigen, wie Du die Bilddaten derzeit versuchst einzufügen?
Gruß
Doming
Hallo,
wenn es nur um ein Logo geht, würde ich den Aufwand nicht betreiben.
Access kann schon seit einiger Zeit Bilder als "Shared" einfügen. Dazu fügst Du das Bild einmalig über "Insert Image" ein, ein Button im Ribbon, und wenn Du dort das Menü aufklappst, siehst Du auch alle Bilder, die Du bereits geladen hast.
Dann auf den betreffenden Seiten ein Image Control, dessen Bildtyp Du auf "Shared" setzt, dann findest Du in der Kombobox für die Auswahl des Bildes Dein geladenes Bild.
Im Gegensatz zu alten Access-Versionen, wo für jedes Image Control je ein Bild hinterlegt wurde, greifen hiermit alle auf das gleiche Bild zu, die Bilddaten sind dann nur einmal in der Datenbankdatei (und Du mußt dazu auch nichts von einem Server laden). Tauschst Du das Bild aus, ist es überall ausgetauscht.
Du kannst ein Template-Formular erstellen und das Image Control dort einfügen (und auch viele andere, die Du immer wieder brauchst) und dann einfach für neue Formulare von dort kopieren. Das kann man von dort natürlich auch in einen Bericht einfügen.
Von der Datenbank zu laden, würde nur Sinn machen, wenn Du das Bild häufig austauschen willst. Für ein eher statisches Bild wie ein Logo lohnt der Aufwand nicht. Die Bilder findest Du in der internen Tabelle MSysResources, wenn Du direkt darauf zugreifen willst.
Gruß
Christian
@Doming Im Bercht, den ich als Unterbericht verwenden will:
Private Sub Report_Load()
Me.Logo.PictureData = Null
LoadPictureFromTblBilderToImageControl Me.Logo, "Briefbogen_Logo"
End Sub
Und die aufgerufene Prozedur ist (getDBConnection darin liefert eine aktive Connection zum SQL-Server)
Public Sub LoadPictureFromDatabaseToImageControl(ByVal ctlImage As Access.Image, _
ByVal strBildID As String)
If Not ctlImage Is Nothing Then
' Bildsteuerelement zunächst leeren
ctlImage.PictureData = Null
If strBildID <> vbNullString Then
Dim bytBild() As Byte
' SQL-Abfrage für das gewünschte Bild
Dim strSql As String
strSql = "SELECT TOP 1 Bilddaten FROM tblBilder WHERE BildID='" & strBildID & "'"
' Daten abrufen
Dim rst As New ADODB.Recordset
rst.Open strSql, getDbConnection, adOpenForwardOnly, adLockReadOnly
' Prüfen, ob Daten vorhanden sind
If Not rst.EOF Then
If Not IsNull(rst.fields.Item("Bilddaten")) Then
' Binärdaten auslesen
bytBild = rst.fields.Item("Bilddaten").Value
' Binärdaten direkt in das Image-Steuerelement laden
ctlImage.PictureData = bytBild
End If
End If
' Objekte freigeben
rst.Close
Set rst = Nothing
End If
End If
End Sub
@Bitsqueezer:
Mit obiger Prozedur lade ich auch andere Bilder wie Produktabbildungen etc. aus der SQL-Server-Datenbank in Formulare und Berichte (und nicht nur ein Logo für den Briefkopf).
Da meine Anwendnung mandantenfähig ist passt Deine Idee der Logospeicherung Shared im (Access-)Frontend leider nicht - es sei denn ich würde beim Anwendungsstart die Server-Tabelle mit den Bildern zumindest teilweise in die lokale Tabelle MSysResources syncen (auch ganz schön aufwändig....).
Grüße, Carsten
Habe den Fehler selber gefunden:
Ich hatte den Event "Beim Laden" benutzt um die Bilddaten zu holen. Öffne ich den Bericht, den ich als Unterbericht einbinden will, direkt dann funktioniert das damit auch. Wird der Berichst hingegen als Unterbericht verwendet dann funktioniert "Beim Laden" aber eben leider nicht.
Verwende ich aber den Event "Beim Öffnen" um die Bilddaten zu holen dann funktioniert es sowohl beim direkten Öffnen des Berichts als auch bei der Einbindung als Unterbericht.
Ich hatte also nur den falschen Event benutzt... ::)