Kategorien:
Suchbegriffe:
Suchfelder:
Suche starten
Neue Beiträge / Top 7
Alle Artikel / Liste
Bücher zu ASP/ASP.Net
Startseite / Hilfe
Fragen zu ASP/ASP.NET
Datenschutzrichtlinen
Impressum / Kontakt
Das ASP.Net Codebook. Die unentbehrliche Referenz für alle ASP.Net-Entwickler [Autoren: Stefan Falz, Karsten Samaschke]
Active Server Pages-FAQ
Active Server Pages - FAQ (v. 1.50) © 2000 - 2020 by Stefan Falz Webconsulting

GetFile! Dynamischer Dateiupload im Browser

Datenbankzugriffe Zurück Druckversion Stefan Falz 16.05.2001
Frage: Wie importiere ich eine CSV-Datei (oder eine andere Textdatenbank) in eine Access-DB?
Sicherlich haben Sie schon desöfteren vor dem Problem gestanden, dass Sie einen Datenimport
aus einer Textdatenbank in eine "richtige" Datenbank vornehmen mussten. Datenbankserver
bieten hier gute Funktionen, mit denen sich tausende Datensätze in kürzester Zeit importieren
lassen. Desktopdatenbanken wie Access bieten keine solchen Funktionen ausser über die Oberfläche
des Programms. Wenn sich die Datenbank aber auf einem Webserver befindet, möchte man diese
nicht immer erst downloaden, die Daten importieren und die Datei wieder uploaden.

Mit der Jet-Engine können Sie jetzt auch tausende von Datensätzen in minimaler Zeit in eine
Datenbank importieren. In unseren Tests (Adresstabelle, 6 Spalten) haben wir z.B.: 10.000
Datensätze in 0,8 Sekunden in eine Access-Datenbank importiert. Diese Zeit hängt aber stark
von dem verwendeten Rechner, dem Aufbau der Tabellen (Indizes, ...) sowie von der Art der
zu importierenden Daten ab. Unser Testrechner war ein P III 600, Windows NT 4 Server SP 6a
mit 384 MB RAM.

Nachfolgend ein Beispiel, um Daten aus einer CSV-Datei in eine Access-Datenbank zu importieren.

[csvtoaccess.asp]
<%
' --- Zusammenstellen der Datenbankverbindungsinformationen
Dim strProvider
    strProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
Dim strDatabase
    strDatabase = "DATA SOURCE=" & Server.MapPath ("./") & "\mdb_test.mdb;"
Dim strComplete
    strComplete = strProvider & strDatabase

' --- Öffnen der Datenbankverbindung
Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.open strComplete

' --- Angeben des Pfads zur CSV-Datei (ohne Pfadangabe)
Dim csv_path
    csv_path = Server.MapPath("./") & "\"

' --- SQL-String zum Neuerstellen einer Tabelle mit allen Daten aus der CSV-Datei
    SQL = "SELECT * INTO tabImport FROM [test_csv.csv] IN """ & csv_path & """ ""TEXT;"""

' --- SQL-String zum Anfügen aller Daten an die Access-Tabelle tabImport aus der CSV-Datei
    'SQL = "INSERT INTO tabImport SELECT * FROM [test_csv.csv] IN """ & csv_path & """ ""TEXT;"""

' --- Ausführen des SQL-Statements
    objConn.Execute SQL
  
' --- Schliessen und terminieren der Datenbankverbindung.
    objConn.Close
Set objConn = Nothing
%>

Sollten Sie andere Dateitypen importieren wollen (andere Dateiendung als txt, tab, csv, txt, htm und html)
und auf die Fehlermeldung "Can't update. Database or object is read-only" bzw. "Aktualisieren nicht
möglich; Datenbank oder Objekt ist schreibgeschützt." treffen, empfiehlt sich die Lektüre des folgenden
Microsoft KB-Artikels: http://support.microsoft.com/support/kb/articles/q245/4/07.asp

Grund für die Fehlermeldung ist, dass die Jet-Engine aus Sicherheitsgründen standardmässig keine
anderen als die o.a. Dateiendungen für den Import zulässt.
Eine Lösung ist, die Datei vor dem Import in <dateiname>.txt oder <dateiname>.csv umzubenennen
und nach dem Import wieder den Originaldateinamen herzustellen. Ein Beispiel, wie man eine Datei
umbenennen kann, finden Sie im letzten Abschnitt des Artikels: Wie greife ich auf Textdateien auf dem
Server zu
.



Auch hier haben wir Ihnen die verwendeten Dateien als Zipfile zum Download bereitgestellt.

artikel_100.zip [10 KB]

Sehr gut
1 2 3 4 5 6
Ungenügend
Zurück | Bisherige Aufrufe: 31336 | Bisherige Bewertungen: 39 | Durchschnitt: 1,95
Stefan Falz Webconsulting