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!

9.9.4 Umgang mit Attachments

9.9.5 Attachment-Felder auslesen

Die folgende Routine zeigt zunächst, wie Sie an die hinter einem Attachment-Feld steckende Tabelle herankommen und gibt zum Beweis die Feldnamen der verborgenen Tabelle aus. Die Routine bezieht sich auf die Tabelle tblDateien, die Sie mit der Prozedur aus Listing 9.9 angelegt haben. Nach dem Öffnen eines Recordsets auf Basis dieser Tabelle weist die Routine einem weiteren Recordset die Value-Eigenschaft des Attachment-Feldes zu - spätestens dies belegt, dass sich hinter Attachments eine weitere, interne Tabelle verbirgt (natürlich können Sie auch die Kurzform mit Ausrufezeichen und ohne Value-Eigenschaft verwenden: rst!Datei). Dieses Recordset kann dann wie jedes andere behandelt werden, was hier durch das Ausgeben der Feldnamen- und Felddatentypen erfolgt:

Public Sub FelderDerAttachmenttabelleAusgeben()
    Dim db As DAO.Database
    Dim rst As Recordset2
    Dim rstAttachments As Recordset2
    Dim fld As Field2
    
    Set db = CurrentDb
    Set rst = db.OpenRecordset("tblDateien", dbOpenDynaset)
    
    If Not rst.EOF Then
        
        Set rstAttachments = rst.Fields("Datei").Value
        For Each fld In rstAttachments.Fields
            Debug.Print fld.Name, fld.Type
        Next fld
        Set rstAttachments = Nothing
    
    Else
        
        MsgBox "Die Funktion funktioniert nicht mit einer leeren Tabelle."
    
    End If
    
    rst.Close
    Set rst = Nothing
    Set db = Nothing
End Sub

Listing 9.46: Auslesen der Felder der Anlagen-Tabelle

Die Ausgabe im Direktfenster sieht dann wie folgt aus:

FileData     11
FileFlags     4
FileName     10
FileTimeStamp 8
FileType     10
FileURL        12

Die Zahlen für die Datentypen entsprechen den Werten aus Tabelle 9.1. Daraus ergeben sich folgende Datentypen:

  • FileData: Byte-Array
  • FileFlags: Long
  • FileName: Text (enthält den Namen der angefügten Datei)
  • FileTimeStamp: Date/Time
  • FileType: Text
  • FileUrl: Memo
  • Daten aus Attachment-Feldern auslesen, Variante I

    Gehen Sie einen Schritt weiter und erzeugen Sie einige Datensätze mit Attachments im Feld Datei. Die folgende Routine zeigt, wie Sie auf die im Attachment-Feld referenzierte, verborgene Tabelle zugreifen und deren Daten auslesen können. Im Prinzip ist diese Routine wie die aus dem vorherigen Listing aufgebaut - mit dem Unterschied, dass sie nicht die Felder, sondern die Datensätze des Attachment-Recordsets durchläuft und die darin gespeicherten Inhalte ausgibt.

    Public Sub AttachmentsAuslesenI()
        Dim db As DAO.Database
        Dim rst As Recordset2
        Dim rstAttachments As Recordset2
        Dim fld As Field2
        
        Set db = CurrentDb
        Set rst = db.OpenRecordset("tblDateien", dbOpenDynaset)
        
        Do While Not rst.EOF
        
            Set rstAttachments = rst.Fields("Datei").Value
            Do While Not rstAttachments.EOF
                Debug.Print rstAttachments!FileFlags, _
                    rstAttachments! FileName, rstAttachments! Filetimestamp, _
                     rstAttachments! FileType , rstAttachments! FileURL
                rstAttachments.MoveNext
            Loop
             Set rstAttachments = Nothing
            rst.MoveNext
        
        Loop
        
        rst.Close
        Set rst = Nothing
        Set db = Nothing
    End Sub

    Listing 9.47: Ausgabe der Informationen aller Anlagen der Datensätze einer Tabelle

    Daten aus Attachment-Feldern auslesen, Variante II

    Wie obiges Beispiel zeigt, verhalten sich das Recordset rst und das Recordset rstAttachments etwa wie per 1:n-Beziehung verknüpfte Tabellen. Sie durchlaufen in einer übergeordneten Schleife alle Datensätze des Recordsets rst und in einer untergeordneten Schleife alle Datensätze von rstAttachments, die zu einem Feld des übergeordneten Recordsets gehören.

    Das können Sie auch einfacher haben, wenn auch scheinbar weniger strukturiert. Dazu greifen Sie bereits beim Deklarieren des Hauptrecordsets auf die Felder des im Attachment-Feld enthaltenen Recordsets zu:

    SELECT DateiID, Datei.FileData, Datei.Filename FROM tblDateien

    Damit erstellen Sie quasi ein Recordset auf Basis der Tabelle tblDateien und der damit verknüpften und versteckten Tabelle mit den Attachments. Wenn Sie etwa alle Dateinamen der in den Datensätzen gespeicherten Dateien ausgeben möchten, können Sie das mit folgender Routine erledigen - achten Sie nur darauf, dass Sie die »Unterfelder« nicht mit der !-Syntax (rst!Datei.Filename), sondern beispielsweise mit rst("Datei.Filename") referenzieren (alternativ können Sie dem Feld bereits in der SQL-Anweisung einen passenden ALIAS-Namen zuweisen):

    Public Sub AttachmentsAuslesenII()
        Dim db As DAO.Database
        Dim rst As Recordset2
        
        Set db = CurrentDb
        Set rst = db.OpenRecordset("SELECT DateiID, Datei.FileData, " _
            & "Datei.Filename FROM tblDateien", dbOpenDynaset)

        Do While Not rst.EOF
            Debug.Print rst!DateiID, rst("Datei.FileName")
            rst.MoveNext
        Loop
            
        rst.Close
        Set rst = Nothing
        Set db = Nothing
    End Sub

    Listing 9.48: Durchlaufen von Attachment-Recordsets ohne Einsatz eines weiteren Recordsets

    Diese Variante können Sie auch für die nachfolgenden Beispiele zu Attachments verwenden. An die notwendige SQL-Anweisung kommen Sie im Übrigen am schnellsten, wenn Sie die gewünschten Felder wie in Abbildung 9.13 in der Abfrage-Entwurfsansicht einer neuen Abfrage zusammenstellen und dann in die SQL-Ansicht wechseln.

    Abbildung 9.13: Abfrage über die Felder einer Tabelle mit Attachment-Feld

    Nächster Abschnitt:

    9.9.6 Dateien aus einem Attachment-Feld auf der Festplatte speichern

    © 2006-2008 André Minhorst Alle Rechte vorbehalten.