smartsuitefaq.martinholz.de

DBF-Dateien nach CSV exportieren (über SQL)

Gelegentlich ist es nützlich die Datensätze aus DBF-Dateien in ein anderes Format zu exportieren, damit man diese Daten in einer anderen Anwendung verwenden kann.
Der kleinste gemeinsame Nenner ist hierbei CSV ( C omma S eparated V alues).
Die Exportfunktion in Approach kann diesen Export selbstverständlich durchführen. Automatisieren lässt sich dieser Vorgang aber leider nur über Makros. "Leider" weil die Makros absolute Pfadangaben enthalten. Wird die APR auf einen anderen Rechner mit einer anderen Verzeichnisstruktur übertragen, funktioniert das Makro garantiert nicht mehr, ohne die Pfade vorher anzupassen.
Eine flexiblere Lösung habe ich mittels LotusScript erstellt. Dieses Script generiert aus allen mit der APR verbundenen Datenbankdateien (DBF) jeweils eine CSV-Datei. Dabei ist es unerheblich wieviele Datensätze oder Felder in den DBF-Dateien enthalten sind.
In meinem Beispiel verwende ich eine DBF mit den Feldern:
Name
Text(50)
Vorname
Text(50)
Adresse
Text(100)
PLZ
Text(5)
Ort
Text(100)
Geboren
Datum(Fest)
ID
Numerisch(10,0) - Vorgabewert: autom. Seriennummer
CREATED
Datum (Fest) - Vorgabewert: Erstelldatum
CHANGED
Datum (Fest) - Vorgabewert: Änderungsdatum

Die CSV-Datei hat nach dem Export das Format:
"Name","Vorname","Adresse","PLZ","Ort","Geboren", "ID","CREATED","CHANGED"

"Müller","Erich","Testweg 5","12345","Beispielhausen","04.10.75","1","01.04.04","03.06.05"
[...]

Das Script sieht so aus:
Sub ExportDB
  Dim PfadZurDB As String
  PfadZurDB = CurrentDocument.Path

  Dim AlleDatenbanken List As String
  For DB = 1 To CurrentDocument.NumTables
    Dim HauptDB As String
    HauptDB = CurrentDocument.Tables(DB - 1).FileName

    Dim DBPfad As String
    DBPfad = CurrentDocument.Tables(DB-1).FullName

    Dim Datei As Integer

    Dim AnzahlEintraege As Long
    AnzahlEintraege = 0
		
    Dim OeffneDB As New Connection
    Dim Abfrage As New Query
    Dim Ausgabe As New ResultSet
	
    If OeffneDB.ConnectTo("DBase IV") Then
      FortschrittAnzeige.Show 0
      FortSchrittAnzeige.Left = 3000
      FortSchrittAnzeige.Top = 3000		
			
      ' Ausgabedatei öffnen
      Datei% = Freefile()
      Open PfadZurDB & "Export/" &  Left(HauptDB, Len(HauptDB) - 4) & ".csv" For Output As #Datei%
			
      ' Datenbank abfragen
      Set Abfrage.Connection = OeffneDB
      Abfrage.SQL = "SELECT * FROM """ & DBPfad & """ " & Left(HauptDB, Len(HauptDB) - 4) & ""
      Set Ausgabe.Query = Abfrage
      If (Ausgabe.Execute) Then
        Ausgabe.FirstRow			
        AnzahlEintraege = Ausgabe.NumRows
				
        ' Fortschritt anzeigen
        FortschrittAnzeige.Progress1.Max = AnzahlEintraege + 1
				
        Dim AnzahlSpalten As Integer
        AnzahlSpalten = Ausgabe.NumColumns
				
        Dim Feldnamen As String		
	Feldnamen = ""

        For i = 1 To AnzahlSpalten
          Feldnamen = Feldnamen & Ausgabe.FieldName(i) & ""","""
        Next
        Feldnamen = """" & Left(Feldnamen, (Len(Feldnamen) - 2))
				
        FortschrittAnzeige.Progress1.Value = FortschrittAnzeige.Progress1.Value + 1

        ' Feldnamen als erste Zeile in die CSV schreiben
        Print #Datei%, Feldnamen
				
        Dim Datensatz As String	
			
	Do 
	  Datensatz = ""
	  For i = 1 To AnzahlSpalten
            Datensatz = Datensatz & Ausgabe.GetValue(i) & ""","""
          Next
          Datensatz = """" & Left(Datensatz, (Len(Datensatz) - 2))
          FortschrittAnzeige.Progress1.Value = FortschrittAnzeige.Progress1.Value + 1
          Print #Datei%, Datensatz
        Loop While (Ausgabe.NextRow)
      End If
			
      ' Alles schließen
      OeffneDB.Disconnect
      Close #Datei%
      FortschrittAnzeige.Close
    End If
  Next
End Sub

Um dem User während des Exports was zum Gucken zu geben, habe ich zusätzlich einen Dialog erstellt, der ausschließlich ein Label und eine Fortschrittsanzeige (ProgressBar) enthält. Dieser Dialog wird im o.a. Script über das Objekt "FortschrittAnzeige" angesprochen. Wer keinen Dialog erstellen mag, oder diesen nicht braucht, kann die entsprechenden Zeilen einfach auskommentieren oder löschen.
Die erstellten CSV-Dateien landen in einem Unterverzeichnis "Export" desselben Verzeichnisses in dem die APR liegt. Das Verzeichnis "Export" ist vorher zu erstellen (oder der Pfad im Script ist entsprechend der eigenen Vorstellungen anzupassen.

Über diesen ArtikelArtikelbewertung
Stand: 15.09.2005
Autor(en): Martin Holz
Durchschnittsnote: Dieser Artikel wurde noch nicht bewertet.
1 2 3 4 5 6