Umlautmurks II: SQLite als Übeltäterin bzw. ?*belt?*terin

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Umlautmurks II: SQLite als Übeltäterin bzw. ?*belt?*terin

Beitrag von Palandt »

Hallo Leute, ich hoffe, es ist bald das letzte Mal, dass ich euch mit Fragen bombardiere, aber wie gesagt, no good handbook, no real help...:)
Also zur Sache: Ich habe mittlerweile das Problem identifiziert, dass ich vor kurzem noch dem Listviewgadget anlastete: SQLite stellt keine "german Umlauts" dar. Ich habe mithin keinen Fehler bei der Konvertierung gemacht, sondern SQLite stellt die Umlaute und das "ß" allesamt als "?" dar. Meine in Rede stehende Datenbank ist auch schon auf UTF-8 eingestellt. Auch der Vorschlag von TS-Soft, den Befehl "SText = PeekS(@SText, -1, #PB_UTF8)" zu verwenden, um die Variable SText zu "konvertieren", nachdem sie den Inhalt des jeweiligen Datensatzes zugewiesen bekommen hat, hilft leider nicht weiter, da die Datenbank ja bereits das richtige Format hat. Auch die Umstellung des Compilerflags nutzt in diesem Fall nichts. Auch meine Idee, den Umlautmurks in der CSV per "Strg + F" zu ersetzen, ist hinfällig, da die Umlaute in der CSV-Datei noch korrekt gespeichert sind.

Meine Ansätze zur Lösung des Problems waren bzw. sind folgende:
1. Ich schreibe eine Prozedur, die mittles "FindString" und "ReplaceString" den von SQLite verursachten Umlautmurks bei Einlesen der Datensätze "zurückkonvertiert"; Problem: SQLite speichert jeden Umlaut unter dem selben Ersatzzeichen "? + noch irgendson Mistakronym" ab, eine Rückkonvertierung ist mithin - mangels eindeutiger Zurordnung - nicht möglich.

2. Ich schreibe eine Prozedur, die diese Konvertierung in der CSV-Datei vornimmt und "äöüß " in für SQLite lesbare Zeichen umwandelt und anschließend muss ich im Programm selbst - spiegelbildlich - dazu, eine Rückkonvertierungsprozedur schreiben. Mittlerweile bin ich soweit, dass ich das hinkriegen werde, da ich String-Konvertierungen bei VB hundertmal gemacht hab und diese sich bei PB so gut wie gar nicht von denen in VB unterscheiden.

Ich habe aber ehrlich gesagt, keine Lust, einen solchen Aufwand zu betreiben, der zudem noch die Fehleranfälligkeit des Progs erhöht, da mit jeder Umwandlungsroutine auch eine Fehlerquelle mehr entsteht.

Fällt euch, der ihr mir oftmals geniale Tipps gegeben habt und geholfen habt vor lauter Wald auch mal wieder die Bäume zu sehen, eine bequemere Lösung ein?

Wenn nicht, dann reicht's mir langsam mit dem Aufwand, den ich zur Konvertierung meiner Datenbank von Access in SQLite betreiben muss, ich werd das Thema dann endgültig abhaken und erst, wenn ein "vollautomatisches" Konvertierungsprogramm zur Verfügung steht, mal wieder an SQLite denken. Ich wollte ja auch erst mit meiner Probedatenbank (§ Tabellen) und dem Umlautmurks weitermachen, aber mittlerweile bin ich mit dem Rohgerüst meines User-Interfaces, nicht zuletzt dank eurer Hilfe, fast fertig und ich kann diese verfluchten ? + Hieroglyphen einfach nicht mehr lesen, da werd ich wahnsinnig.

Danke im Voraus!
Wenn die dicke Frau klatscht, ist die Oper zu Ende
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Umlautmurks II: SQLite als Übeltäterin bzw. ?*belt?*teri

Beitrag von Kiffi »

a²+b²=mc²
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Beitrag von Palandt »

Achwas, damit löse ich bzw. du :) auch gleich noch mein Umlautproblem?

Werde ich gleich mal teste, vielen dank nochmals, wusste gar nicht, was sich so für "Schmankerl" in deinem Code verbergen können...:)

Meld mich dann nach nem Testdurchlauf...dann erst gibts den Ritterschlag...:)
Wenn die dicke Frau klatscht, ist die Oper zu Ende
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Beitrag von Palandt »

Hi Kiffi, ich habs mit 3 Tabellen aus meiner richtigen Datenbank versucht, leider hab ichs nicht hingekriegt. Das Prog meldete mir zwar keinen Fehler, schloss aber mit dem Debug-Kommentar "MDB!" ab, ohne dass eine neue Datenbank erstellt wurde.

Hier das von mir modifizierte Code-Segment:

Code: Alles auswählen


Define MDB_ODBC.s  = "K:\VB-Programme\PURE BASIC\QM\Database\QM2.mdb" ; Hier trägst Du Deine ODBC-Verbindung ein = Datenbank
Define SQLite_DB.s = "K:\VB-Programme\PURE BASIC\QM\Database\QM2.sqlite" ; Hier trägst Du ein, wo die SQLite-Datenbank erstellt werden soll

NewList Tabellenname.s()

; Nun trägst Du in der LinkedList die Namen der zu exportierenden Tabellen ein:
AddElement(Tabellenname()) : Tabellenname() = "Schadensrecht"
AddElement(Tabellenname()) : Tabellenname() = "SR_Anwartschaftsrecht"
AddElement(Tabellenname()) : Tabellenname() = "VerwProzR7_Normenkontrolle"
; [...] und so weiter und so fort
Was mach ich falsch?
Wenn die dicke Frau klatscht, ist die Oper zu Ende
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Palandt hat geschrieben:Was mach ich falsch?
in MDB_ODBC wird der Name Deiner ODBC-Verbindung eingetragen und
nicht der komplette Datei-Pfad

also

Code: Alles auswählen

Start / Einstellungen / Systemsteuerung / Verwaltung / Datenquellen (ODBC)
aufrufen und in dem nun erscheinenden Dialog eine Benutzer-DSN eintragen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Beitrag von Palandt »

Was bitte ist das denn? Das hab ich noch nie gebraucht ???? :shock:

//EDIT: Ich hab das Menu grad mal aufgemacht, mein lieber Scholli, da werden ja die übelsten Sachen abgefragt, das Vokabular, das dort verwendet wird, ruft bei mir Erinnerungen an einen chinesischen Olympiakommentator hervor, der einmal versehentlich ohne Übersetzung Eingang in irgendeine deutsche Olympiaübertragung gefunden hat...da verstell ich lieber nichts....*bibber - angst vor absturz*....
Wenn die dicke Frau klatscht, ist die Oper zu Ende
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Palandt hat geschrieben:Was bitte ist das denn?
http://de.wikipedia.org/wiki/ODBC
Palandt hat geschrieben:Das hab ich noch nie gebraucht ???? :shock:
ich nehme mal an, dass Du über ADO (oder DAO) Deine MDB mit VB
konnektiert hast. Geht auch unter PureBasic, doch dafür würdest Du die
Vollversion benötigen; in der Demo-Version sind API-Aufrufe nicht erlaubt.
Palandt hat geschrieben:da verstell ich lieber nichts
Du brauchst da nix zu verstellen. Du musst lediglich eine ODBC-Verbindung hinzufügen.

Also:

* Benutzer-DSN
* Button 'Hinzufügen...'
* "Microsoft Access Driver (mdb)" auswählen
* In Datenquellenname QM2 eintragen
* Button 'Auswählen...'
* Im nun erscheinenden Fileselektor Deine MDB lokalisieren
* OK drücken
* Fertig

im Code sieht das dann so aus:

Code: Alles auswählen

[...]
Define MDB_ODBC.s  = "QM2" ; Hier trägst Du Deine ODBC-Verbindung ein
[...]

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Beitrag von Palandt »

Ab heute nur noch GROßVESIR PROF. DR. rer. nat. DR. phil. GRAF VON KIFFI !!!!!!!!

Tausend Dank, es hat geklappt, sogar die Umlaute sind weg! Du hast es echt drauf, Muchacho!

PS: Ich hab seit gestern die Vollversion (Monatserster, muss diesen Monat jetzt 4 Kisten Bier weniger trinken, wird knallhart! :) ). Wenn ich Prof. Dr. Dr. Kiffi dann noch darum bitten dürfte, mir zu sagen, wie ich es - denk dran Vollversion - hinkriege, dass ich diese Umstellerei in Windows meinen Usern ersparen kann? Der Tanklaster mit dem Jahresvorrat Dom Perignon ist übrigens schon zu dir unterwegs....

//EDIT: Aber das blöde ListViewGadget zeigt die Umlaute immer noch nicht richtig an, obwohl sie jetzt in der DB richtig gespeichert sind, aber immerhin zeigt es pro Umlaut ein eigenes Zeichen an, dann kann ich ja meinen eingangs erwähnten Punkt 1- Vorschlag verwirklichen, das ist dann nicht mehr so aufwendig.

//EDIT2: Problem mit dem ListviewGadget mit TS-Soft's Trick gelöst:
SText = PeekS(@SText, -1, #PB_UTF8)#
Jetzt passt alles, Hurra!
Wenn die dicke Frau klatscht, ist die Oper zu Ende
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Palandt hat geschrieben:Wenn ich Prof. Dr. Dr. Kiffi dann noch darum bitten dürfte, mir zu sagen, wie ich es - denk dran Vollversion - hinkriege, dass ich diese Umstellerei in Windows meinen Usern ersparen kann?
die Einrichtung einer ODBC-Schnittstelle benötigst Du ja nur auf Deinem
Rechner zwecks Konvertierung MDB -> SQLite.

Dein User bekommen also Deine Programmversion, die auf die SQLite-DB
zugreift und die kann (wie Du im Code oben gut sehen kannst) mit einer
Pfadangabe konnektiert werden. Also Anwenderrechner: nix ODBC :-)
Palandt hat geschrieben:Der Tanklaster mit dem Jahresvorrat Dom Perignon ist übrigens schon zu dir unterwegs....
Budweiser Budvar wäre mir lieber ;-)

Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

<offtopic>
Kiffi hat geschrieben:ich nehme mal an, dass Du über ADO (oder DAO) Deine MDB mit VB
konnektiert hast.
wie jetzt... die Datengbank mit der Goldkante? ... oder Dead On Arrival...

@Palandt
gibts von deinem Ava ne große version im Netz?
mich würde mal interessieren, was da drunter steht...
</offtopic>
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten