VBA Tipp: Download einer Datei aus dem Internet und Import in eine Access Datenbank

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte eine Datei aus dem Internet herunterladen. Der Download erfolgt über das http-Protokoll.

Lösung 1

Die Datei wird (ohne Meldung) heruntergeladen, und im vorgegebenen Pfad gespeichert.

Das geht mit der folgenden API-Funktion und VBA-Funktion, die in einem allgemeinen (globalen) Modul gespeichert werden.

' Quelle: http://www.dbwiki.net/
 
Option Explicit
 
 
Private Declare Function URLDownloadToFile Lib "urlmon.dll" _
   Alias "URLDownloadToFileA" ( _
   ByVal pCaller As Long, _
   ByVal szURL As String, _
   ByVal szFileName As String, _
   ByVal dwReserved As Long, _
   ByVal lpfnCB As Long) As Long
 
 
Public Function DateiHerunterladen(Url As String, Pfad As String) As Long
 
   DoCmd.Hourglass True
   DateiHerunterladen = URLDownloadToFile(0, Url, Pfad, 0, 0)
   DoCmd.Hourglass False
 
End Function

Aufruf

   Dim strUrl   As String
   Dim strDatei As String
 
   strUrl = "http://www.meinedomain.de/update/EineDatei.zip"
   strDatei = CurrentProject.Path & "\EineDatei.zip"
 
   If DateiHerunterladen(strquellpfad, strzielpfad) = 0 Then
      MsgBox "Download erfolgreich"
   Else
      MsgBox "Download nicht erfolgreich"
   End If
Wiki hinweis.png

Hinweis:

Falls die Datei bereits existiert, wird sie ohne Vorwarnung überschrieben.


Lösung 2

  • Der "Speichern unter"-Dialog wird eingeblendet, um den Speicherort der Datei auszuwählen.
  • Nach dem Download wird das "Download beendet"-Fenster angezeigt.
  • Nach dem Download kann der Dateiinhalt in eine Access-Tabelle importiert werden.

Das geht mit der folgenden API-Deklaration und Funktion, die in einem allgemeinen (globalen) Modul gespeichert werden.

Public Declare Function DoFileDownload Lib "shdocvw.dll" ( _
   ByVal lpszFile As String) As Long

Aufruf

Angewandt am Beispiel der Outputdatei eines Online-Games:

   DoFileDownload "http://www.die-staemme.org/map/village.txt"


Der Dateiinhalt kann in eine Access-Tabelle importiert werden.
Die Importfunktion von Access sieht dann so aus:

   DoCmd.TransferText acImportDelim, _
                      "Village Importspezifikation", "T_VILLAGE", _
                      "C:\TEMP\village.TXT"

Wichtig ist, dass man den Aufbau des Textfiles sowie dessen Kodierung kennt und durch welches Zeichen die Datensätze getrennt werden. Am einfachsten ist es, die Textdatei in einem Editor anzuschauen, um das Trennzeichen zu finden.

Die Importspezifikation erstellt man durch Datei > Externe Daten, indem man die Textdatei auswählt, das Trennzeichen eingibt, die nötigen Informationen zum Import angibt, und diese speichert. Anschließend kann die Spezifikation ganz einfach in VBA verwendet werden.

Wiki hinweis.png

Anmerkungen:

Der Download findet asynchron statt, weshalb man nicht erfährt, wann der Download abgeschlossen ist.
Es wird auch der Cache des Internet Explorers verwendet, was bedeutet, dass man ohne Löschen des Caches, nicht unbedingt den aktuellen Download erhält.


Weblinks