[HSQL, Base, Basic] Macro Driven CSV Import
Alles, wirklich alles, hängt an den konkreten csv-Daten und an der tatsächlichen Datenbank, die verwendet wird. Nein, Base ist keine Datenbank. Base ist ein Werkzeug, um Datenbanken im Kontext von LibreOffice zu verwenden.
– EDIT –
Das ist die Funktion, die im zweiten Beispiel vom 6. Januar alles zusammenführt.
Function ImportCSV(sURL$, sDBPath$, sTextFile$, sTextTable$, sView$, sDataTable$) As Long
- Rückgabewert ist die Anzahl der angefügten Zeilen.
- sURL is die URL der zu importierenden CSV-Datei. Im Beispiel wird die URL per Datei-Öffnen-Dialog ermittelt
- sDBPath ist die Pfad-URL zur Datenbank (bei eingebetteter Datenbank der Dokumentenpfad, bei externer HSQL das Datenbankverzeichnis)
- sTextFile ist der Name der Textdatei, mit der die HSQL Text-Tabelle verknüpft ist (“import.csv” im Beispiel)
- sTextTable ist der Name dieser HSQL Text-Tabelle. Die Text-Tabelle importiert alle nicht SQL-kompatiblen Werte als Text (VARCHAR) (“import_csv” im Beispiel)
- sView ist der Name der Ansicht, die die Text-Tabelle so umformt, dass das Ergebnis mit der Zieltabelle kompatibel ist (“import_View” im Beispiel).
- sDataTable ist der Name der Zieltabelle (“Data” im Beispiel)
Die Funktion trennt die Textdatei von der Text-Tabelle, kopiert die Textdatei unter dem richtigen Namen in das Datenbankverzeichnis, stellt die Verbindung der Text-Tabelle zur neuen Textdatei wieder her und macht dann INSERT INTO “Data” (SELECT * FROM “ImportView”)
Die Ansicht “ImportView” ist eine SELECT-Abfrage, welche die zu importierenden Spalten der verknüpften Texttabelle in die richtige Reihenfolge bringt und dabei inkompatible Strings (z.B. Kommadezimalzahlen und dt Datumswerte) in kompatible Spaltentypen umwandelt. Optional kann man auch noch Duplikate herausfiltern, die bereits in der Zieltabelle vorhanden sind.
Da man in Base einmal erstellte Ansichten nicht mehr bearbeiten kann, habe ich die Ansicht noch als Abfrage “ViewSource” hinterlegt. Will man die Ansicht ändern, löscht man sie erstmal, ändert dann die Abfrage und schließlich Rechts-click>Abfrage als Ansicht … und gibt den Namen der Ansicht ein, die dann bei den Tabellen erscheint. HSQL weiß nichts über Base-Abfragen, aber es kann Ansichten sehen weil die in der Datenbank selbst gespeichert sind und nicht im Datenbank-Dokument.