SQLite Umlaute
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
SQLite Umlaute
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
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
-
- 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
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');
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: SQLite Umlaute
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
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
Re: SQLite Umlaute
Bei Zeos suchen oder fragen: http://zeos.firmos.at/index.phpJosefKoller hat geschrieben: Vielleicht weiß ja doch noch jemand, was ich machen könnte.
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: SQLite Umlaute
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
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
-
- 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
kannst nicht mal versuchen, wie es mit einer anderen DB ausschaut?
-
- 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
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/
-
- Beiträge: 93
- Registriert: Di 17. Apr 2012, 22:41
Re: SQLite Umlaute
@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
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
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: SQLite Umlaute
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
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
-
- Lazarusforum e. V.
- Beiträge: 3177
- 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
verwendet doch soweit ich weis Win-1252 als Codepage.JosefKoller hat geschrieben:Delphi 6 prof.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- 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
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
Re: SQLite Umlaute
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
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
-
- Beiträge: 93
- Registriert: Di 17. Apr 2012, 22:41
Re: SQLite Umlaute
@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
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