SQLite Umlaute

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

SQLite Umlaute

Beitrag von JosefKoller »

Hallo,

ich habe bisher eine SQLite DB mittels Delphi und Zeos verwaltet. Bei der Zeos Connection hatte ich bei Properties: "codepage=utf-8".

Die Datenbank und deren Tabellen legte ich mit dem Tool "sqliteadmin" an.

Sowohl mit dem Tool als auch mitels Delphi/Zeos wurden die deutschen Umlaute richtig angezeigt.

Nun bin ich am Probieren mit Lazarus. Auch hier hab ich die Zeos Komponenten installiert. Auch hier habe ich unter Properties "codepage=utf-8" eingetragen. Diese hab ich mit der gleichen SQLite DB verbunden, wie vormals mittels Delphi und Zeos.

Nur bei Lazarus (z. b. im DBGrid) werden plötzlich die Umlaute nicht mehr angezeigt. Stattdessen ? und andere Steuerzeichen.

Trage ich nun mittels Lazarus und Zeos Umlaute in die Datenbank ein, wird zwar z. b. in einem DBGrid alles richtig angezeigt.

Dafür stehen aber nun in der Datenbank selber Steuerzeichen statt der Umlaute. Überprüft wieder mit dem Tool "sqliteadmin".

Wie bekomme ich denn einen "Gleichklang" mit Lazarus anlaog zu Delphi hin?
Sowohl in der Datenbank als auch in der Anwendung sollen die Umlaute dargestellt werden.

Danke

Josef

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: SQLite Umlaute

Beitrag von khh »

probiere mal folgende Einstellungen


Code: Alles auswählen

 
 
    ZConnection.Properties.Clear;
    ZConnection.Properties.Add('character_set_client=utf8');
    ZConnection.Properties.Add('character_set_connection=utf8');
    ZConnection.Properties.Add('character_set_database=utf8');
    ZConnection.Properties.Add('character_set_results=utf8');
    ZConnection.Properties.Add('character_set_server=utf8');
    ZConnection.Properties.Add('character_set_system=utf8');
    ZConnection.Properties.Add('collation_connection=utf8_general_ci');
    ZConnection.Properties.Add('collation_database=utf8_general_ci');
    ZConnection.Properties.Add('collation_server=utf8_general_ci');
    ZConnection.Properties.Add('Codepage=utf8');                 
 
 

JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

Re: SQLite Umlaute

Beitrag von JosefKoller »

Hallo,

nein, auch mit diesen Parametern das gleiche Problem.

Ich habe mittlerweile von der SQLite Seite die aktuelle dll-Datei geholt und die sqlite3.dll Dateien sowohl unter Delphi als auch unter Lazarus damit ersetzt. Auch die dll Datei in meinem Admintool wurde damit überschrieben.

Es ist damit also überall die gleiche dll-Datei.

Nur, es ändert auch nichts an der Situation.

In Delphi und in meiner damit erzeugten EXE-Datei und mit dem Adminttool werden die Umlaute richtig angezeigt.

In Lazarus (mit Zeos) aber immer noch das Gleiche. Es werden statt der Umlaute fragezeichen dargetellt.

Auch die Anweisung

PRAGMA ENCODING="UTF-8"

abgesetzt. Nix hilft.

Das Blöde ist nur, daß ich sowohl in der Anwendung als auch in der DB selber die richtige Darstellung brauche, weil die Daten auch über csv-Dateien ausgelesen und weiterverarbeitet werden.

Muß wahrscheinlich doch bei Delphi bleiben.

Vielleicht weiß ja doch noch jemand, was ich machen könnte.

danke.

Josef

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: SQLite Umlaute

Beitrag von theo »

JosefKoller hat geschrieben:Vielleicht weiß ja doch noch jemand, was ich machen könnte.


Bei Zeos suchen oder fragen: http://zeos.firmos.at/index.php

JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

Re: SQLite Umlaute

Beitrag von JosefKoller »

Hallo,

hast recht.

Ich glaub aber nicht das es an Zeos liegt.

Ich hab mittlerweile eine Verbindung mit der Komponente

SQLite3Connection

zur besagten Datenbank aufgebaut.

Auch hier das Gleiche: unterschiedliche Darstellung der Sonderzeichen.

Ich probiers trotzdem mal im Zeos Forum. vielleicht weiß da jemand, woran das liegen könnte.

Danke

Josef

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: SQLite Umlaute

Beitrag von khh »

kannst nicht mal versuchen, wie es mit einer anderen DB ausschaut?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: SQLite Umlaute

Beitrag von Christian »

Also bei mir funktioniert das ohne Parameter wunderbar ich tippe mal drauf das du ne alte Zeos Version verwendest.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

EgonHugeist
Beiträge: 93
Registriert: Di 17. Apr 2012, 22:41

Re: SQLite Umlaute

Beitrag von EgonHugeist »

@JosefKoller

Ich denke Christian hat recht. Vorn weg: Welche Delphi Type hast du verwendet? Ansi oder Unicode?

Hier ergeben sich verschiedene Probleme:

Die "alten" Zeos-Versionen konnten nicht wirklich mit SQLite und dem UTF8-characterset umgehen. Weiterhin nimmt SQLite auch keine Prüfung auf korrekte Encodierung vor. Soll heißen SQLite ist ein alles Fresser. PostgrSQL ist da z.B. sehr sensibel. Also es ist möglich, dasß du WIN1252 encodierte strings anstatt UTF8-Encodierte Strings in die Datenbank geschrieben hattest. Das erklärt dan auch die '?' an Stelle eines 'ö' z.B., da alle LCL Controls UTF8 erwarten, welche zu WideStrings (zwecks Darstellung) decodiert werden. Ist die Decodierung falsch kommt ein '?'=UnsupportedByteSequence dabei raus.

Nun muß aber auch nicht unbedingt Zeos etwas falsch gemacht haben, da du auch dafür verantworlich bist, das die gesendeten Strings utf8-encodiert sind. Mit einem Ansi-Delphi brächtest du da spezielle Controls anstatt der standart controls oder solltes WideString-Fields benutzen. Solltest du ein Unicode-Delphi verwenden, hat Zeos etwas falsch gemacht und du hattest vermutlich mit einer alten Zeos7-Version (vor Beta) gearbeitet.

Seit Zeos7-Beta kannst du für alle FPC/Delphi versionen mit AutoEncodeString und ControlsCodePage(cGET_ACP, cCP_UTF8, cCP_UTF16) arbeiten und Zeos macht den Rest. Alle Encodierungen passen. So kannst du auch mit Lazarus und eine Latin1 connection arbeiten.

In jedem Falle müßten mehrt Information her..

Gruß Michael
ZeosDevTeam

JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

Re: SQLite Umlaute

Beitrag von JosefKoller »

Hallo,

war unterwegs und komm erst jetzt zum Antworten. Und vorab .....Danke, daß ihr Euch meines Problems annehmt.

So wie ich es haben will (also gleiche Darstellung in der Anwendung und in der DB selber), funktioniert es mit

Delphi 6 prof. und Zeos 6.6.6. Es werden lediglich Standardkomponenten und Ableitung davon verwendet. wie gesagt, es funktioniert trotzdem wie gewollt.

Die Datenbank selber hab ich mit sqliteadmin.exe angelegt. Daten, die über dieses Modul eingetragen werden, werden auch in meiner Delphi Anwendung so angezeigt, wie ich sie eingetragen habe, also: wenn ich Ü eingebe, kommt in der Anwendung auch ein Ü rüber.

Lazarus hab ich am Donnerstag komplett neu geladen und installiert. Die ZEOS Komponenten ließen sich nur mit einer trunk-Version installieren (Vers.7.0.1-beta) installieren.

Mit Lazarus eben die geschilderten Probleme:

Trage ich ein Ü über die Anwendung ein, steht in der Datenbank ein Steuerzeichen. Trage ich über das Admintool ein Ü ein, steht in der Anwendung ein Steuerzeichen.

Vielleicht würde es ja mit den TNT Controls funktionieren. Da finde ich aber nichts für Lazarus.

Mach jetzt erst mal mit Delphi weiter.

Schade. Lazarus schaut mittlerweile sehr gut aus.

Ciao

Josef

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: SQLite Umlaute

Beitrag von Socke »

JosefKoller hat geschrieben:Delphi 6 prof.

verwendet doch soweit ich weis Win-1252 als Codepage.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: SQLite Umlaute

Beitrag von khh »

JosefKoller hat geschrieben:Hallo,
war unterwegs und komm erst jetzt zum Antworten. Und vorab .....Danke, daß ihr Euch meines Problems annehmt.

So wie ich es haben will (also gleiche Darstellung in der Anwendung und in der DB selber), funktioniert es mit

Delphi 6 prof. und Zeos 6.6.6. Es werden lediglich Standardkomponenten und Ableitung davon verwendet. wie gesagt, es funktioniert trotzdem wie gewollt.



Trage ich ein Ü über die Anwendung ein, steht in der Datenbank ein Steuerzeichen. Trage ich über das Admintool ein Ü ein, steht in der Anwendung ein Steuerzeichen.



Josef



Hallo Josef,
meine oben geposteten Einstellungen funktionieren mit Zeos 6.6 , Lazarus und MySql (nicht light)

Collation steht auf latin1.

Gruss KH

Thadde
Beiträge: 2
Registriert: Do 20. Dez 2012, 13:42

Re: SQLite Umlaute

Beitrag von Thadde »

Hallo Josef,

mit der Darstellung der Umlaute habe ich das gleiche Problem bei MYSQL und Lazarus. Wird über eine Lazarusoberfläche ein Umlaut eingegeben, erscheint er in der Datenbank in kryptischer Form. Wird über PHPMyAdmin der Umlaut eingegeben, erscheint er in der Lazarusoberfläche in kryptischer Form.
Dies hat m.E. entwas mit der HTML-Darstellung zu tun.
Eine Lösung habe ich aber bisher nicht gefunden.

Viele Grüße
Thadde

EgonHugeist
Beiträge: 93
Registriert: Di 17. Apr 2012, 22:41

Re: SQLite Umlaute

Beitrag von EgonHugeist »

@Josef

Also dein Problem ist mir jetzt schon klar, wenn du unter Delphi 6 keine TNT oder sonstige UTF8/WideString basierende Komponenten verwendet hast. Da hat "Socke" Recht und du hast Win1252 encodierte Strings in die DB geschrieben. Die Property TZConnection.Properties.Values['codepage'] änderter kein Verhalten von Zeos mit v.6, nein so wurde nur der Server informiert, den gewünschten CharacterSet als Client-Encoding zu nutzten. Für die richtige Encodierung mußtest du da schon seber sorgen.

Lazarus sowie Zeos trifft da keine Schuld. Alle LCL-Controls erwarten UTF8-Encodierte Strings, welch du jedoch nicht geschrieben hast. Kleines Bsp. unter LCL:

Edit1.Text := UTF8String('äüäüäü'); //hoffe das funzt auch.

Also ihr schreibt AnsiString(CP = 1252) Strings und die LCL controls Decodieren diesen:

DisplayText(WideString) := UTF8Decode(UTF8String('äüäüäü'));
Alle ungültigen Byte-Sequenzen sollten nun als '?????' dargestellt sein.

@Thadde
Ich denke bei dir ist das gleiche Problem vorhanden. Oder der PHP Admin kann nicht mit einer Latin1 encodierten Umgebung umgehen -> Execute: 'SET NAMES=UTF8'

@Beide
Ich würde euch einen vollständigen Daten-Export mit der App, welch die Daten geschrieben hatte, empfehlen. Dann auf Zeos7 (hmpf haben den Support für D6down eingestellt ): ) aufrüsten. Zeos7 erkennt/fragt die DB encodierung automatisch ab. Außerdem ist es möglich mit TZConnection.AutoEncodeStrings weiter mit de nativen Windows CodePage zu arbeiten aber Zeos übernimmt die automatische encodierung für euch.

Gruß Michael
ZeosDevTeam

Antworten