SQLite2DBF Konverter

Hier kann über Nicht-Support-Themen gesprochen werden.
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54
Wohnort: Canton Magny, Normandie

SQLite2DBF Konverter

Beitrag von Michael Uplawski »

Ursprung der Idee ist die Diskussion zu DataMaker: viewtopic.php?p=100902#p100902
Das vorläufige Ergebnis ist als Ruby-Gem zu installieren und läuft mit Ruby 2.3 oder später:

Code: Alles auswählen

user@machine:~$ sudo gem install sqlite2dbf
Das Programm benötigt zwei weitere 'gems', sqlite3 und shp (Edit: Sind als runtime-Abhängigkeiten definiert und sollten automatisch installiert werden. Falls nicht ...) :

Code: Alles auswählen

user@machine:~$ sudo gem install sqlite3
user@machine:~$ sudo gem install shp
Nach der erfolgreichen Installation, kann die Aufrufsyntax mit dem Kommandozeilenparameter -h angezeigt werden:

Code: Alles auswählen

user@machine:~$ sqlite2dbf -h

Aufrufsyntax:	sqlite2dbf -q [SQLite-Datei] [Optionen]
	oder sqlite2dbf [Allgemeine Optionen]

Spezielle Optionen:
    -q, --quelle [Datei.sqlite]      SQLite Datei, die gelesen wird.
    -z, --ziel [Datei(0...n).dbf]    Name der dBase-Dateien (1 pro Tabelle), die geschrieben werden.
        --zeit [Liste]               Eine Liste von Feldern (Tabellenspalten), die als Zeitstempel behandelt werden sollen.
        --daten [liste]              Eine Liste von Feldern (Tabellenspalten), die als Datums/Zeit-Werte behandelt werden sollen.
    -t, --tab                        Tabellen-Namen als Dateinamen für die DBF-Ausgabe verwenden

Allgemeine Optionen:
    -d, --debug                      Debug Meldungen zeigen
    -h, --hilfe                      Diese Nachricht anzeigen
    -v, --version                    Versions- und Programminformationen anzeigen
Beispiel: die SQLite-Datei /home/example_user/.local/share/zeitgeist/activity.sqlite soll nach dBase konvertiert werden. Da das Verzeichnis gewechselt werden muss, wird als Ziel /tmp/test gewählt:

Code: Alles auswählen

sqlite2dbf -q /home/example_user/.local/share/zeitgeist/activity.sqlite -z /tmp/test --zeit timestamp
Nach der Verarbeitung befinden sich im Verzeichnis /tmp 10 neue Dateien *.dbf:

Code: Alles auswählen

user@machine:~$ ls /tmp/*.dbf
/tmp/test0.dbf  /tmp/test2.dbf  /tmp/test4.dbf  /tmp/test6_empty.dbf  /tmp/test8.dbf
/tmp/test1.dbf  /tmp/test3.dbf  /tmp/test5.dbf  /tmp/test7.dbf        /tmp/test9.dbf
Jede *.dbf Datei entspricht einer Tabelle aus der ursprünglichen SQLite Datenbank. Die Tabelle 6 enthält keine Daten.

Feedback an mich oder in diesem Thread.

Sorry für die Festlegung auf Ruby 2.3+ aber ich möchte nicht mit vielen verschiedenen Interpretern herum experimentieren. Es wird sicherlich zukünftig noch Aktualisierungen der Gem geben, aber das scheint schon zu laufen.
Zuletzt geändert von Michael Uplawski am 11.11.2017 10:21:52, insgesamt 1-mal geändert.
Mein problemloses Linux-System: Debian Buster/Sid mit OpenBox/Rox Desktop.
People should go where they are not supposed to go, say what they are not supposed to say and stay, when they are told to leave.
Bild(Howard Zinn)
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54
Wohnort: Canton Magny, Normandie

Re: SQLite2DBF Konverter

Beitrag von Michael Uplawski »

Bugfixes in Version 0.1.8:
  • Augenscheinlich werden SQlite Datentypen mal in Klein- mal in Großbuchstaben geliefert. Damit kann der Konverter jetzt umgehen.
  • Exception-Handling bei Überschreitung der Feldbreiten für Textfelder vermeidet den Programmabsturz, schreibt aber auch nichts mehr in das betroffene Feld.
Neu:
  • mit dem Parameter -t (--tab) wird ein Zugriffspfad erwartet, damit die erzeugten Dateien an beliebigen Orten abgelegt werden können (wie bei -z (--ziel) )
Wenn das mal jemand unter Windows® testen würde... wäre wie Weihnachten, auch wenn ich mir nicht vorstellen kann, dass das wirklich gut funktioniert.
Mein problemloses Linux-System: Debian Buster/Sid mit OpenBox/Rox Desktop.
People should go where they are not supposed to go, say what they are not supposed to say and stay, when they are told to leave.
Bild(Howard Zinn)
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54
Wohnort: Canton Magny, Normandie

Re: SQLite2DBF Konverter

Beitrag von Michael Uplawski »

N'abend.

Frage an alle, die mit SQL arbeiten, an der Verwendung von dBase ex SQLite in SoftMaker Office interessiert sind und den Einsatz des SQLite2DBF-Konverters in Betracht ziehen (vielleicht ist das niemand, dann gebe ich mir die Antwort selber):

Wenn mit einer SQLite Datenbank mehrere Tabellen konvertiert werden müssen, und eine oder mehrere Tabellen Kalenderdaten oder Zeitstempel enthalten, in welcher Weise soll der Konverter von diesen Feldern Kenntnis erlangen?
  • Wie bisher über Kommandozeilenargumente, allerdings mit dem Namen der betroffenen Tabelle[n], z.B.:

    Code: Alles auswählen

    sqlite2dbf -q [original-db.sqlite] --datum "name_tabelle1:datumsfeld name_tabelle1:datumsfeld2" \ 
     --zeit name_tabelle3:zeitstempel_feld"
  • Durch die Nennung einer Text-Datei, aus der diese Angabe gelesen wird, z.B.:

    Code: Alles auswählen

    sqlite2dbf -q [original-db.sqlite] --feld_liste [datei.txt]
    Die Text-Datei enthält dann Tabellen-Namen und Felder:

    name_tabelle_1:
    • datum: feld1, feld2

    name_tabelle_3:
    • datum: feld1
      zeit: feld4
Es ist auch denkbar, die Verarbeitung immer nur auf eine einzige Tabelle zu beschränken. Dann muss ich nur ein Argument für den Tabellennamen einbauen:

Code: Alles auswählen

sqlite2dbf -q [original-db.sqlite] --tname [name_der_tabelle] --datum "feld1 feld2"
Alle drei Möglichkeiten können auch gleichzeitig implementiert werden. Das halte ich aber am Ende für verwirrend.
Mein problemloses Linux-System: Debian Buster/Sid mit OpenBox/Rox Desktop.
People should go where they are not supposed to go, say what they are not supposed to say and stay, when they are told to leave.
Bild(Howard Zinn)
FFF
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 2328
Registriert: 11.06.2013 22:30:18

Re: SQLite2DBF Konverter

Beitrag von FFF »

Michael Uplawski hat geschrieben:N'abend.

Frage an alle, die mit SQL arbeiten, an der Verwendung von dBase ex SQLite in SoftMaker Office interessiert sind und den Einsatz des SQLite2DBF-Konverters in Betracht ziehen (vielleicht ist das niemand, dann gebe ich mir die Antwort selber):

Wenn mit einer SQLite Datenbank mehrere Tabellen konvertiert werden müssen, und eine oder mehrere Tabellen Kalenderdaten oder Zeitstempel enthalten, in welcher Weise soll der Konverter von diesen Feldern Kenntnis erlangen?
  • Wie bisher über Kommandozeilenargumente, allerdings mit dem Namen der betroffenen Tabelle[n], z.B.:

    Code: Alles auswählen

    sqlite2dbf -q [original-db.sqlite] --datum "name_tabelle1:datumsfeld name_tabelle1:datumsfeld2" \ 
     --zeit name_tabelle3:zeitstempel_feld"
  • Durch die Nennung einer Text-Datei, aus der diese Angabe gelesen wird, z.B.:

    Code: Alles auswählen

    sqlite2dbf -q [original-db.sqlite] --feld_liste [datei.txt]
    Die Text-Datei enthält dann Tabellen-Namen und Felder:

    name_tabelle_1:
    • datum: feld1, feld2

    name_tabelle_3:
    • datum: feld1
      zeit: feld4
Es ist auch denkbar, die Verarbeitung immer nur auf eine einzige Tabelle zu beschränken. Dann muss ich nur ein Argument für den Tabellennamen einbauen:

Code: Alles auswählen

sqlite2dbf -q [original-db.sqlite] --tname [name_der_tabelle] --datum "feld1 feld2"
Alle drei Möglichkeiten können auch gleichzeitig implementiert werden. Das halte ich aber am Ende für verwirrend.
Michael, könntest Du mal 'ne kleine SQLite db hier hochstellen? Mit "problematischen" Feldern?
Mit freundlichem Gruß
Karl
SM 2018 rev. 982/0109/64, klassisches Menu @ W8.1/64 /Deutsch/Deutsch // emC 7
SM 2024NX Nightly, klassisches Menu
16GB Ram; Core i5-3450 mit integriertem Intel HDGraphics 4000, Treiber 10.18.10.4276; Samsung SSD 840pro
2560x1440 Monitor 100% Darstellungsgröße /// LaserJet 1200 per USB via Fritzbox 6591.
Empfehlung für supereinfache Bildschirmvideos: https://www.screentogif.com/
Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1656
Registriert: 06.02.2007 14:01:47

Re: SQLite2DBF Konverter

Beitrag von Dewes »

Wenn das mal jemand unter Windows® testen würde... wäre wie Weihnachten
Ich kann dir deinen Weihnachtswunsch wahrscheinlich erfüllen, obwohl ich kein Rubyspezialist bin.

Da ich keine Erfahrung mit Linux habe, komme ich über deinen Link nicht an den Code. Könntest du diesen hier als Datei einstellen.
Michael, könntest Du mal 'ne kleine SQLite db hier hochstellen? Mit "problematischen" Feldern?
Ja, das wäre nicht schlecht. Ich würde dann auch mal versuchen, mit XProfan zu konvertieren. Wir haben wohl im Forum einen Profan-Spezialist (ts-soft), aber dem wird wie auch mir es an Zeit mangeln.
Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1656
Registriert: 06.02.2007 14:01:47

Re: SQLite2DBF Konverter

Beitrag von Dewes »

Im übrigen, für Nutzer die nicht täglich konvertieren, gibt es noch die Möglichkeit mit dem Firefox-Addon "SQlite-Manager". Mit diesem kann SQLite-Tabellen in eine csv-Datei exportieren, diese dann in PM einlesen und als "dbf" speichern, c'est tout.
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54
Wohnort: Canton Magny, Normandie

Re: SQLite2DBF Konverter

Beitrag von Michael Uplawski »

Dewes hat geschrieben:Im übrigen, für Nutzer die nicht täglich konvertieren, gibt es noch die Möglichkeit mit dem Firefox-Addon "SQlite-Manager". Mit diesem kann SQLite-Tabellen in eine csv-Datei exportieren, diese dann in PM einlesen und als "dbf" speichern, c'est tout.
SQLite in CSV exportieren geht auf manigfaltige Weise. Wenn später mit TextMaker gearbeitet werden muss, braucht es den letzten Schritt auch nicht mehr. Im Grunde genommen ist mein Konverter ein Spiel, “Proof of concept” und wird am Ende eines beweisen:

Die Leute wollen keine Datenbank. Die Leute wollen DataMaker. :mrgreen:

Egalomat.

Ich kümmere mich um eine kleine SQLite Datei mit Datums- und Zeistempeln. Es sind solche Dateien aber auch schon mit Firefox installiert. Heute abend muss ich mich leider (Quatsch! Ich liebe das) um die Verbreitung gemeinfreien Saatguts kümmern und habe etwas Schwierigkeiten mit der Dokumentation. Spätestens Morgen präsentiere ich eine Beispiel-Datenbank.

Cheerio und Danke fürs Interesse. :thumbsup:
Mein problemloses Linux-System: Debian Buster/Sid mit OpenBox/Rox Desktop.
People should go where they are not supposed to go, say what they are not supposed to say and stay, when they are told to leave.
Bild(Howard Zinn)
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54
Wohnort: Canton Magny, Normandie

Re: SQLite2DBF Konverter

Beitrag von Michael Uplawski »

Da es mir schwer fällt eine Beispieldatenbank selber zu erstellen, hier im Anhang eine Cookies Datei mit antiquierten Yahoo Cookies aus einer alten Iceweasel-Installation. Sie enthält ein Datum/Zeit Feld (expiry) und zwei Zeitstempel-Felder (lastAccess und creationTime).

Da ich sowieso eine Zip-Datei anhängen muss, enthält das Archiv gleich auch eine mit sqlite2dbf erzeugte dBase-Variante. Die Kommandozeile für die Transformation war:

Code: Alles auswählen

sqlite2dbf -q ./cookies.sqlite --date expiry --zeit "lastAccessed creationTime"
*)

Cheerio.
cookies_db.zip
(1.81 KiB) 232-mal heruntergeladen
Edit: Da ist ein Fehler in der Kommandozeile, oben. Es müsste --daten heißen aber ich erinnere mich nicht mehr daran, wie ich das gemacht habe. :|
Zuletzt geändert von Michael Uplawski am 18.11.2016 22:56:47, insgesamt 1-mal geändert.
Mein problemloses Linux-System: Debian Buster/Sid mit OpenBox/Rox Desktop.
People should go where they are not supposed to go, say what they are not supposed to say and stay, when they are told to leave.
Bild(Howard Zinn)
FFF
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 2328
Registriert: 11.06.2013 22:30:18

Re: SQLite2DBF Konverter

Beitrag von FFF »

Michael Uplawski hat geschrieben:Da es mir schwer fällt eine Beispieldatenbank selber zu erstellen, hier im Anhang eine Cookies Datei mit antiquierten Yahoo Cookies aus einer alten Iceweasel-Installation. Sie enthält ein Datum/Zeit Feld (expiry) und zwei Zeitstempel-Felder (lastAccess und creationTime).

Da ich sowieso eine Zip-Datei anhängen muss, enthält das Archiv gleich auch eine mit sqlite2dbf erzeugte dBase-Variante. Die Kommandozeile für die Transformation war:

Code: Alles auswählen

sqlite2dbf -q ./cookies.sqlite --date expiry --zeit "lastAccessed creationTime"
Cheerio.
cookies_db.zip
Ok, das funktioniert. Was machst Du mit Memo-Feldern?
Mit freundlichem Gruß
Karl
SM 2018 rev. 982/0109/64, klassisches Menu @ W8.1/64 /Deutsch/Deutsch // emC 7
SM 2024NX Nightly, klassisches Menu
16GB Ram; Core i5-3450 mit integriertem Intel HDGraphics 4000, Treiber 10.18.10.4276; Samsung SSD 840pro
2560x1440 Monitor 100% Darstellungsgröße /// LaserJet 1200 per USB via Fritzbox 6591.
Empfehlung für supereinfache Bildschirmvideos: https://www.screentogif.com/
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54
Wohnort: Canton Magny, Normandie

Re: SQLite2DBF Konverter

Beitrag von Michael Uplawski »

FFF hat geschrieben:Ok, das funktioniert. Was machst Du mit Memo-Feldern?
Das weiß ich nicht. :wink:
Welchen Datentyp muss ich dafür annehmen, auf beiden Seiten der Transformation?

Ähnlich wie bei Blobs und Real Feldern wird es auch noch andere Werte geben, die sich querstellen, verkehrt transformiert oder der Transformation gelegentlich bis immer entgehen werden.
Mein problemloses Linux-System: Debian Buster/Sid mit OpenBox/Rox Desktop.
People should go where they are not supposed to go, say what they are not supposed to say and stay, when they are told to leave.
Bild(Howard Zinn)
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54
Wohnort: Canton Magny, Normandie

Re: SQLite2DBF Konverter

Beitrag von Michael Uplawski »

Bezüglich der Frage aus meinem Posting oben, habe ich entschieden, eine Konfigurationsdatei vorzusehen, in der die Namen der Kommandozeilenparameter erhalten bleiben. Um die Syntax der Kommandozeile nicht unnötig zu verkomplizieren, wird die Konvertierung auf eine einzige Tabelle der SQLite-Datenbank beschränkt und ein neuer Parameter für den Namen der Tabelle vorgesehen.

Diese Änderung wird mit einem Aufräumen des Codes einhergehen, da sich das anbietet. Hier wird das Wetter schlecht, die Äpfel sind gepflückt und das Holz gehackt. Darum kann es sein, dass eine neue Version von SQLite2DBF ziemlich bald fertig wird... Da sind noch zwei, drei Bäume umzuhauen, aber das mach' ich nicht bei Sturm.
Mein problemloses Linux-System: Debian Buster/Sid mit OpenBox/Rox Desktop.
People should go where they are not supposed to go, say what they are not supposed to say and stay, when they are told to leave.
Bild(Howard Zinn)
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54
Wohnort: Canton Magny, Normandie

Re: SQLite2DBF Konverter

Beitrag von Michael Uplawski »

Dewes hat geschrieben:Da ich keine Erfahrung mit Linux habe, komme ich über deinen Link nicht an den Code. Könntest du diesen hier als Datei einstellen.
Code folgt im Anhang.
Zuvor nur noch der Hinweis, dass nach der Installation des Ruby-Interpreters auch das “Installationswerkzeuggem zur Verfügung steht. Diei Ruby-gem SQLite2DBF wird damit heruntergeladen und gleich installiert. Da Ruby eine Interpretersprache ist, ist implizit der Quellcode für jedermann zugänglich.

Das gem-File kann auch einfach heruntergeladen werden: www.rubygems.org/gems/sqlite2dbf
Dann muss es freilich ausgepackt werden:

Code: Alles auswählen

user@machine:~$ tar -xf sqlite2dbf.gem 
Die im Archiv enthaltene, komprimierte Datei data.tar.gz ebenfalls:

Code: Alles auswählen

user@machine:~$ tar -xzf data.tar.gz
Der Code liegt dann im Verzeichnis lib, in bin befindet sich nur die Ruby-Datei, die als ausführbar gilt und auf lib zugreift.

Aber hier ist die aktuelle Version
Dateianhänge
sqlite2dbf_code.zip
(40.83 KiB) 234-mal heruntergeladen
Zuletzt geändert von Michael Uplawski am 21.11.2016 20:35:43, insgesamt 3-mal geändert.
Mein problemloses Linux-System: Debian Buster/Sid mit OpenBox/Rox Desktop.
People should go where they are not supposed to go, say what they are not supposed to say and stay, when they are told to leave.
Bild(Howard Zinn)
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54
Wohnort: Canton Magny, Normandie

Re: SQLite2DBF Konverter

Beitrag von Michael Uplawski »

Leute, die Zip-Datei oben war kaputt!! Das dürft Ihr mir ruhig sagen. Ich korrigiere das jetzt und prüfe sogar, ob der Download danach funktioniert. Lasst nicht alles kommentarlos über euch ergehen! Wenn einer sagt:
Hier ist der Code
oder
Wir engagieren uns gegen den Klimawandel
und hinterher is nix! Dann müsst Ihr den treten!!!

Nochmal ein Zip-Archiv mit dem gesamten Inhalt des Projektverzeichnisses. ACHTUNG! Das ist jetzt “work in progress” und muss nicht lauffähig sein!
Dateianhänge
sqlite2dbf_code.zip
(40.83 KiB) 228-mal heruntergeladen
Mein problemloses Linux-System: Debian Buster/Sid mit OpenBox/Rox Desktop.
People should go where they are not supposed to go, say what they are not supposed to say and stay, when they are told to leave.
Bild(Howard Zinn)
Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1656
Registriert: 06.02.2007 14:01:47

Re: SQLite2DBF Konverter

Beitrag von Dewes »

Ein Test unter Windows produziert folgende Fehlermeldung:
sq.jpg
sq.jpg (48.55 KiB) 11526 mal betrachtet
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54
Wohnort: Canton Magny, Normandie

Re: SQLite2DBF Konverter

Beitrag von Michael Uplawski »

Dewes hat geschrieben:Ein Test unter Windows produziert folgende Fehlermeldung:
sq.jpg
Das im interaktiven Interpreter zu versuchen, ist keine gute Idee. Damit das geht, müssen alle Abhängigkeiten erst manuell eingebunden werden. require 'logging' führt zur Lösung des aktuellen Problems, nicht aber zu einer lauffähigen Routine. SQLite2DBF ist ein Programm! Das muss man auf der Kommandozeile und nicht im Interpreter starten!

Also in etwa so: Im DOS-Fenster (oder was man so hat) eingeben:

Code: Alles auswählen

sqlite2dbf -h
NICHT in IRB!!!

ACHTUNG!! Das funktioniert, wenn das gem-file installiert wurde. Der Code aus dem Zip-File oben ist nur zur Ansicht. Darin habe ich schon Aktualisierungen vorgenommen, die erst in der nächsten Version, wahrscheinlich 0.2.0, richtig laufen.
Mein problemloses Linux-System: Debian Buster/Sid mit OpenBox/Rox Desktop.
People should go where they are not supposed to go, say what they are not supposed to say and stay, when they are told to leave.
Bild(Howard Zinn)
Antworten

Zurück zu „Sonstiges“