Home > Artikel > Ausgabe 11/2013 > Bilder in Access, Teil III: Bilder aus OLE-Feldern anzeigen

Bilder in Access, Teil III: Bilder aus OLE-Feldern anzeigen

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Für alle, die Bilder flexibel in allen Access-Versionen einbinden und verwenden möchten, bietet sich das OLE-FEld an. Dabei füllen Sie die Daten nicht so hinein, wie es der erste Teil dieser Artikelreihe beschrieben hat, sondern als Byte-Array. Das heißt, dass Sie die komplette Datei, so wie sie auch auf der Festplatte liegt, in das OLE-Feld schreiben. Von dort aus können Sie die Datei beispielsweise wieder auf die Festplatte zurückschreiben oder diese als Bild an verschiedenen Stellen anzeigen – beispielsweise als Icons im TreeView- oder ListView-Steuerelement.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1311_Bilder.mdb.

Bilder anzeigen

Grundsätzlich gibt es zwei verschiedene Arten, Bilder zu speichern: in einem OLE-Feld oder in einem Anlage-Feld. Dabei ist letztere die moderne Variante, die mit Access 2007 eingeführt wurde. Die Anzeige der gespeicherten Bilder erfolgt meist als Icon für Schaltflächen, Ribbons, ListView- und TreeView-Steuerelemente oder in Kontextmenüs. Bei den Schaltflächen gibt es ebenfalls seit Access 2007 Neuerungen, wobei sich mit Access 2010 weitere Änderungen ergeben haben. In dieser Artikelreihe beschreiben wir das Beziehen von Bildern sowohl aus OLE-Feldern als auch aus Anlage-Feldern.

Die Techniken für die Anzeige im Ribbon, in TreeView- und ListView-Steuerelementen sowie in Kontextmenüs sind über die Versionen gleich geblieben, bei den Schaltflächen oder einfachen Bildern von Formularen haben sich jedoch Änderungen ergeben. Wir beziehen uns in diesem Fall nur auf die aktuelle Version, die seit Access 2010 Verwendung findet.

Bilder aus dem OLE-Feld anzeigen

Zunächst schauen wir uns an, wie Sie Bilder aus einem OLE-Feld in verschiedenen Objekten anzeigen. Später betrachten wir dann die Anzeige von Bildern aus einem Anlage-Feld und speziell solche aus einer Tabelle namens MSysResources – einer Systemtabelle, die seit Access 2010 automatisch eingerichtet wird.

Bildformat einstellen

Nochmal zur Erinnerung: In neueren Access-Versionen (ab Access 2007) legen Sie fest, dass Dateien nicht in Bitmaps konvertiert werden sollen, sondern im Quellbildformat zu speichern sind. Dies erspart an manchen Stellen Ärger (siehe Bild 1).

Einstellen der Access-Optionen für das Speichern von Bildern

Bild 1: Einstellen der Access-Optionen für das Speichern von Bildern

Vorbereitung

Um die nachfolgenden Beispiele in Ihre eigenen Anwendungen zu integrieren, benötigen Sie drei Module, die Sie in der Beispieldatenbank zu diesem Artikel finden. Diese heißen:

  • mdlOGL0713
  • mdlBLOBs0713
  • mdlOLE

Diese Module wurden von Sascha Trowitzsch programmiert und von mir an die Access-Version von 2013 angepasst.

OLE-Bild in Bildsteuerelement anzeigen

Um ein Bild aus einem OLE-Feld in einem Bildsteuerelement anzuzeigen, laden Sie das Bild aus dem OLE-Feld zunächst in eine spezielle Variable und weisen diese dann dem Bildsteuerelement zu (siehe Bild 3).

Anzeigen eines Bildes aus einem OLE-Feld

Bild 2: Anzeigen eines Bildes aus einem OLE-Feld

Für das folgende Beispiel wollen wir die Bilder aus dem OLE-Feld der Tabelle tblOLEBilder verwenden. Dazu binden Sie ein Formular an diese Tabelle und fügen diesem neben den beiden Feldern OLEBildID und Bildname noch ein Bildsteuerelement hinzu (siehe Bild 2). Beim Hinzufügen zeigt Access automatisch einen Grafik einfügen-Dialog an, den Sie aber mit der Escape-Taste schließen können – das Bildsteuerelement wird dann zunächst ohne Inhalt angelegt. Legen Sie für das Bildsteuerelement den Namen ctlOLE fest.

Hinzufügen eines Bildsteuerelements zu einem Formular

Bild 3: Hinzufügen eines Bildsteuerelements zu einem Formular

Damit das Formular beim Anzeigen eines Datensatzes auch gleich das im OLE-Feld gespeicherte Bild anzeigt, fügen Sie der Ereignisprozedur, die durch das Ereignis Beim Anzeigen ausgelöst wird, die Zeilen aus Listing 1 hinzu. Diese Prozedur deklariert und füllt ein Database-Objekt namens db. Die folgende Anweisung übernimmt gleich den Job, das Bild aus dem OLE-Feld im Bildsteuerelement anzuzeigen. Dazu ruft sie die Funktion OLE2Binary auf, die folgende Parameter erwartet:

Private Sub Form_Current()

     Dim db As DAO.Database

     Set db = CurrentDb

     Me!ctlOLE.PictureData = mdlOLE.OLE2Binary(db, "tblOLEBilder", "OLEBildID", Me!OLEBildID, "OLEBild")

End Sub

Listing 1: Anzeigen des Inhalts eines OLE-Feldes im Bildsteuerelement

  • dbs: Verweis auf die Datenbank
  • strTable: Name der Tabelle mit dem OLE-Feld
  • strIDField: Name des Primärschlüsselwertes
  • lngID: Primärschlüsselwert des Datensatzes mit dem anzuzeigenden OLE-Feldinhalt
  • strOLEField: Name des OLE-Feldes

Das Ergebnis der Funktion weisen Sie direkt der Eigenschaft PictureData des Bildsteuerelements zu. Dieses zeigt dann das gewünschte Bild an.

Bilder in Schaltflächen

Wenn Sie Schaltflächen mit Bildern versehen wollen, werden Sie typischerweise die dazu vorgesehenen Bilder direkt mit den Mitteln der jeweiligen Access-Version zur Schaltfläche hinzufügen. Wenn Sie diese dennoch aus irgendwelchen Gründen etwa zur Laufzeit austauschen möchten, können Sie ebenfalls die soeben vorgestellte Funktion OLE2Binary nutzen.

Im Beispiel des Formulars frmOLEBildAufSchaltflaeche wollen wir einen Hover-Effekt erzeugen, also ein anderes Bild anzeigen, solange der Benutzer mit der Maus über der Schaltfläche verharrt.

Dazu soll zunächst beim Laden des Formulars das Bild auf der Schaltfläche erscheinen, das unter dem Primärschlüsselwert 6 in der Tabelle tblOLEBilder gespeichert ist. Dies erledigen wir durch die Prozedur Form_Load aus Listing 2, die beim Laden des Formulars ausgelöst wird.

Private Sub Form_Load()

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!