Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Automatisierter Dateidownload

Wenn Datei aus dem Internet regelmig auf den eigenen Rechner geladen werden sollen, kann das in Arbeit ausarten. Warum also diesen Vorgang nicht automatisieren - per VBA und anderen Hilfsmitteln? Und wenn Sie schon einmal dabei sind: Speichern Sie die heruntergeladenen Dateien doch direkt in der Datenbank und stellen Sie diese bei Bedarf zur Verfgung.

Beispieldatenbank

Die Beispieldatenbank namens Download.mdb enthlt alle nachfolgend beschriebenen Funktionen sowie die Tabelle tblDateien zum Speichern von heruntergeladenen Dateien.

Halbautomatisierter Download

Einen schnellen, halbautomatisierten Download erreichen Sie ber die API-Funktion DoFileDownload aus der Bibliothek shdocvw.dll. Dieser Funktion bergeben Sie einfach den Dateinamen. Die Funktion stellt eine Verbindung zu der angegebenen Adresse her und zeigt den Dialog zum Festlegen des Zielspeicherortes an.

Private Declare Function DoFileDownload Lib "shdocvw.dll" _

        (ByVal lpszFile As String) As Long

Public Sub Download1(Downloadadresse As String)

    DoFileDownload StrConv(Downloadadresse, vbUnicode)

End Sub

Vollautomatisierter Download

Um den Download vollends zu automatisieren, greifen Sie auf die Bibliothek MSXML zu, auf die Sie zunchst einen Verweis erstellen. Anschlieend knnen Sie die folgende Funktion verwenden, um eine im Parameter strDateiadresse angegebene Datei aus dem Internet herunterzuladen und unter dem mit dem Parameter strZieladresse angegebenen Namen zu speichern.

Public Function Dateidownload(ByVal strDateiadresse As String, _

    ByVal strZieladresse As String) As Long

    DoCmd.Hourglass True

    Dim objXMLHTTP As MSXML2.XMLHTTP

    Set objXMLHTTP = New MSXML2.XMLHTTP

    Dim Buffer() As Byte

    On Error GoTo Dateidownload_Err

    With objXMLHTTP

        .Open "GET", strDateiadresse, True

        .send

        Buffer = .responseBody

    End With

    Open strZieladresse For Binary Access Write As #1

    Put #1, , Buffer

    Close #1

    DoCmd.Hourglass False

    Exit Function

Dateidownload_Err:

    Dateidownload = Err.Number

End Function

Downloaddatei in der Datenbank speichern

Die nchste Variante speichert die heruntergeladene Datei direkt in der Datenbank. Gegenber der ersten Version werden hier lediglich die beiden Objekte cnn und rst fr den Zugriff auf die Tabelle tblDateien mehr bentigt.

Den Entwurf der Tabelle tblDateien knnen Sie Abbildung 1 entnehmen.

Abbildung 1: Entwurfsansicht der Tabelle zum Speichern der Dateien

Die Funktion DateidownloadDB verwendet die Methode AppendChunk des Feldes Datei der Tabelle tblDateien, um die heruntergeladenen Daten zu speichern. Zustzlich speichert diese Funktion die Internetadresse, die die herunterzuladende Datei angibt, in der Tabelle.

Public Function DateidownloadDB(ByVal strDateiadresse As String) As Long

    DoCmd.Hourglass True

    Dim cnn As ADODB.Connection

    Dim rst As New ADODB.Recordset

    Dim objXMLHTTP As MSXML2.XMLHTTP

    Set cnn = CurrentProject.Connection

    rst.Open "SELECT * FROM tblDateien WHERE DateiID = 0", _

        cnn,  dOpenDynamic, adLockOptimistic

    Set objXMLHTTP = New MSXML2.XMLHTTP

    Dim Buffer() As Byte

    On Error GoTo DateidownloadDB_Err

    With objXMLHTTP

        .Open "GET", strDateiadresse, True

        .send

        Buffer = .responseBody

    End With

    rst.AddNew

    rst!Datei.AppendChunk Buffer

    rst!Internetadresse = strDateiadresse

    rst.Update

    DoCmd.Hourglass False

    Exit Function

DateidownloadDB_Err:

    DateidownloadDB = Err.Number

End Function

Dateien aus Datenbank exportieren

Um die in der Datei gespeicherten Daten in Dateien zu exportieren, verwenden Sie die folgende Funktion. Diese verwendet die Methode GetChunk des Feldes Datei der Tabelle tblDateien, um den Inhalt dieses Feldes in eine Datei mit dem im Parameter strSpeicherort angegebenen Namen zu speichern.

Public Function DateiExportieren(DateiID As Integer, _

    strSpeicherort As String) As Long

    Dim cnn As ADODB.Connection

    Dim rst As New ADODB.Recordset

    On Error GoTo DateiExportieren_Err

    Set cnn = CurrentProject.Connection

    rst.Open "SELECT * FROM tblDateien WHERE DateiID = " & DateiID, _

        cnn, adOpenDynamic, adLockOptimistic

    Dim ExportdateiID As Long

    Dim Buffer() As Byte

    Dim Dateigroesse As Long

    ExportdateiID = FreeFile

    Dateigroesse = Nz(LenB(rst!Datei), 0)

    If Dateigroesse > 0 Then

        ReDim Buffer(Dateigroesse)

        Open strSpeicherort For Binary Access Write As ExportdateiID

        Buffer = rst!Datei.GetChunk(Dateigroesse)

        Put ExportdateiID, , Buffer

        Close ExportdateiID

    End If

    Exit Function

DateiExportieren_Err:

    DateiExportieren = Err.Number

End Function

© 2003-2015 André Minhorst Alle Rechte vorbehalten.