Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

11.6 Bilder und Dateien im OLE-Feld einbetten oder verknüpfen

11.7 Bilder und Dateien als Binärstrom im OLE-Feld speichern

In den folgenden Abschnitten lernen Sie einige Funktionen kennen, mit denen Sie Dateien in ein Feld einer Access-Datenbank importieren und die Datei wieder im Dateisystem speichern können.

Importieren einer Datei in ein OLE-Feld einer Tabelle

Die Funktion SaveFileToOLEField importiert eine Datei in ein OLE-Feld einer Tabelle. Die Funktion erwartet folgende Parameter:

  • strFilename: Dateiname der zu importierenden Datei
  • strTable: Name der Zieltabelle
  • strOLEField: Name des Zielfelds
  • boolEdit: Angabe, ob die Datei in das OLE-Feld eines bestehenden Datensatzes eingefügt werden soll
  • strIDField: Primärschlüsselfeld der Zieltabelle
  • lngID: Primärschlüsselwert des Zieldatensatzes
  • Die Routine erzeugt zunächst einen SQL-Ausdruck, der entweder den kompletten oder einen eingeschränkten Recordset auf die Zieltabelle zurückgibt - das hängt davon ab, ob boolEdit wahr ist und die Datei somit in das OLE-Feld eines bestimmten Datensatzes eingefügt werden soll. Nach einer Prüfung, ob die angegebene Datei vorhanden ist, aktiviert die Funktion entweder den aktuellen Datensatz zum Bearbeiten oder legt einen neuen Datensatz an. Schließlich erfolgt das Schreiben der Datei in Form eines Binärstroms in das Tabellenfeld - siehe auch die Kommentare im Listing.

    Public Function SaveFileToOLEField(strFilename As String, strTable As String, strOLEField As String, Optional boolEdit As Boolean, Optional strIDField As String, Optional lngID As Long) As Long

        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim lngFileID As Long
        Dim Buffer() As Byte
        Dim lngFileLen As Long

        Dim strSQL As String
        On Error GoTo SaveFileToOLEField_Err
        Set db = CurrentDb
        strSQL = "SELECT " & strOLEField & " FROM " & strTable
        If boolEdit = True Then
            strSQL = strSQL & " WHERE " & strIDField & " = " & lngID
        End If
        'Datensatzgruppe mit dem Zielfeld für die Datei öffnen
        Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)
            
        'Meldung, falls Datei nicht vorhanden ist
        If Dir(strFilename) = "" Then
            MsgBox "Die Datei '" & strFilename & "' existiert nicht."
            Exit Function
        End If
        'Bearbeitung des Datensatzes beginnen
        If boolEdit = True Then
            rst.Edit
        Else
            rst.AddNew
        End If
        'Funktion zum Füllen des Feldes aufrufen
        On Error GoTo SaveFileToOLEField_Err
        'Dateinummer für die Dateioperationen festlegen
        lngFileID = FreeFile
        'Zu importierende Datei für den binären Zugriff öffnen
         Open strFilename For Binary Access Read Lock Read Write As lngFileID
        'Dateigröße ermitteln
        lngFileLen = LOF(lngFileID)
        'Größe der Variablen für den Dateiinhalt anpassen
         ReDim Buffer(lngFileLen)
        'Zielfeld leeren
        rst(strOLEField) = Null
        'Inhalt der Datei in Variable "Buffer" schreiben
         Get lngFileID, , Buffer
        'Inhalt der Variablen in das Zielfeld schreiben
        rst(strOLEField). AppendChunk Buffer
        'Recordset aktualisieren
        rst.Update
        SaveFileToOLEField = True
    SaveFileToOLEField_Exit:
        On Error Resume Next
        Close lngFileID
        rst.Close

        Set rst = Nothing
        Set db = Nothing
        Exit Function
    SaveFileToOLEField_Err:
        SaveFileToOLEField = Err.Number
        Resume SaveFileToOLEField_Exit
    End Function

    Listing 11.3: Funktion zum Importieren einer Datei in ein OLE-Feld einer Tabelle

    Das Speichern einer Datei in einen neuen Datensatz erfolgt beispielsweise mit dem folgenden Aufruf:

    SaveFileToOLEField CurrentProject.Path & "\bilder_01.tif", "tblOLE", "OLEFeld"

    Wenn Sie die Datei in einem bestimmten Datensatz speichern wollten, müssen Sie auch noch die letzten drei Parameter angeben:

    SaveFileToOLEField CurrentProject.Path & "\bilder_02.tif", "tblOLE", "OLEFeld", True, "OLEFeldID", 1

    Ob das Speichern funktioniert, können Sie zuverlässig nur mit der nachfolgend vorgestellten Funktion feststellen. Die soll nämlich die Datei aus dem OLE-Feld wiederherstellen.

    Nächster Abschnitt:

    11.8 Bilder und Dateien im binären Format aus einem OLE-Feld wiederherstellen

    © 2006-2008 André Minhorst Alle Rechte vorbehalten.