Seite 1 von 1

Umlaute beim Zugriff auf SQLite3

Verfasst: 28.12.2013 16:03
von pe-gdb
Ich habe eine DB erstellt, mit 'SQLAdmin' von SQLite, mit einer Table, die die Felder 'nr' und 'name' enthält.
Dabei habe ich in 'Name' eingegeben: 'ÄÖÜßäöü'.
Jetzt der Zugriff auf diese Daten:
Mit allen SQLite-Tools (SQLAdmin, SQLiteToolbox, SQLiteSpy und SQLite-Kommandozeile)
kommen die Umlaute korrekt!
Nur beim Zugriff mit dem mitgelieferten PureBasic-Editor und auch mit 'jaPBe' funktioniert es nicht - die Umlaute werden nicht bzw. falsch dargestellt: aus 'Müller' wird 'M'ller' usw.
An was kann das liegen?

Re: Umlaute beim Zugriff auf SQLite3

Verfasst: 28.12.2013 16:34
von ts-soft
Ich weiß nicht, ob das bereits gefixed wurde, aber das Problem betrifft nicht alle PB-Versionen.
Teste also mal mit der aktuellen Version, einer älteren oder Compiliere im Unicode-Modus.

Re: Umlaute beim Zugriff auf SQLite3

Verfasst: 29.12.2013 11:44
von pe-gdb
Vielen Dank für die rasche Antwort.
Das, mit dem Compilieren im Unicode-Modus hört sich gut an.
...
Habe ich jetzt ausprobiert, mit folgendem Resultat:
Das Problem trat auf mit PureBasic 5.21. Jetzt habe ich es ausprobiert
mit Version 5.11 - hatte dasselbe negative Resultat.
Im 'Normalmode' ausgeführt erscheinen die Umlaute als Asc(63) und im Unicode
ausgeführt als Asc(65533), und zwar für alle Umlaute ä,ö,ü,Ä,Ö,Ü !

Mache ich denselben Versuch mit einem Delphi-Prog, da funktioniert es !
Verwendet PureBasic auch die 'SQLite3.dll' ?

Re: Umlaute beim Zugriff auf SQLite3

Verfasst: 29.12.2013 14:03
von Waldixxl
Halo pe-gdb

Seit PB Version 5.11
- Aktualisiert: SQLite Version (3.7.15.2)
Walter

Re: Umlaute beim Zugriff auf SQLite3

Verfasst: 29.12.2013 14:44
von ts-soft
Das ganze hat nichts mit der verwendeten SQLite Version zu tun.
SQLite nutzt im normalfalle immer UTF-8. PB speichert aber in einigen
Versionen in ASCII und Unicode, was verkehrt ist. Fred wollte das wieder
korrigieren, finde den Beitrag aber im eng. Forum nicht.
Es macht keinen Sinn, wenn PB mal Ascii und mal Unicode verwendet, die
Datenbank sollte möglichst immer dieselben Ergebnisse liefern, wenn auch
unter ASCII Kompilierung einige wenige Zeichen verloren gehen.

Ich hab aber jetzt keine Zeit und Lust mir ein Testprogramm zu schreiben :mrgreen:

Gruß
Thomas

//edit
hier: http://www.purebasic.fr/english/viewtop ... 79#p431679
ist der Bugreport im engl. Forum!

Wichtig: Der Sourcecode in der IDE muß auch in UTF-8 gespeichert werden! Es gibt hier ja noch ein paar,
die ihre Sourcen immer noch in ASCII abspeichern und sich wundern, warum Unicode usw. nicht richtig
funktionieren.

Der Bug scheint aber noch nicht gefixed zu sein, nur im Unicode-Modus (+ UTF-8 -Source) kommen diese
Sonderzeichen korrekt.

Re: Umlaute beim Zugriff auf SQLite3

Verfasst: 29.12.2013 16:16
von sibru
das hilft (nach jeder Leseoperation):

Code: Alles auswählen

Procedure.s SQL_Umlaute(Text$)      ;- SQL-Umlaut-Fehler korrigieren
  Protected Such$, Pos
  Protected Korr$ =  "Ä Ä Ã– Ö Ãœ Ü Ã¤ ä ö ö ü ü ß ß" ;jeweils Fehler- und Korrektur-Zeichenkette
  For Pos=1 To 13 Step 2
    Such$ = StringField(Korr$,Pos," ")
    Repl$ = StringField(Korr$,Pos+1," ")
    Text$ = ReplaceString(Text$, Such$, Repl$)
   Next 
  ProcedureReturn Text$
EndProcedure

Re: Umlaute beim Zugriff auf SQLite3

Verfasst: 29.12.2013 16:51
von pe-gdb
vielen Dank für Eure Mühen und Antworten.
Es ist tatsächlich so, daß PB für die Umlaute Unicode verwendet,
ansonsten ASCII.

Re: Umlaute beim Zugriff auf SQLite3

Verfasst: 29.12.2013 17:35
von ts-soft
pe-gdb hat geschrieben:Es ist tatsächlich so, daß PB für die Umlaute Unicode verwendet,
ansonsten ASCII.
Leider nicht ganz korrekt. PB verwendet UTF-8 und liest im Unicode-Compiler-Mode auch UTF-8 zurück.
Aber im ASCII Mode, wird nicht als UTF-8 sondern als ASCII gelesen. Somit verschwinden nicht nur
alle reinen Unicode-Zeichen, was unvermeidbar ist, sondern auch diejenigen, die in beiden Zeichencodierungen
vorhanden sind, also Umlaute, Eurozeichen usw.

Bis das gefixed ist, würde ich meine Exe in Unicode erstellen, es gibt sowieso keinen Grund noch ASCII zu
nutzen und das Problem ist gelöst. Aber nicht vergessen, die IDE auch auf UTF-8 umzustellen, sonst macht
Unicode nicht unbedingt Sinn :wink: