Import SQLITE aus CSV: Umlauteproblem
- BoraBora
- Beiträge: 50
- Registriert: So 11. Apr 2021, 16:00
- OS, Lazarus, FPC: FPC 3..2.2, L 2.2.0 , Linux Mint, WIN 10&11, Android,
- CPU-Target: xxBit
Import SQLITE aus CSV: Umlauteproblem
Guten Tag,
folgendes Problem treibt mich in den Wahnsinn...
In ein Stringgrid lade ich eine CSV-Datei, die laut Notepad++ UTF8BOM kodiert ist,
was korrekt ist.
Danach iteriere ich durch das Grid und speichere bestimmte Daten in einer SQLITE-Datei.
Gibt es einem einem Text einen Umlaut, ist alles i.O.
Gibt es einem Text zwei Umlaute, wird anscheinend UTF8 ignoriert.
Die beiliegende Hardcopy zeigt oben das Stringgrid und unten ein DBGrid, das die
entsprechenden Daten im SQLITE-File wiedergibt.
Es ist egal, ob ich ZEOS benutze oder Datensätze per SQL in die Datenbank schreibe.
Das Problem ist auch nicht auf die gezeigten Datensätze beschränkt und ich kann
es beliebig reproduzieren.
Ist das ein Fehler?
Bin für jeden Hinweis dankbar.
folgendes Problem treibt mich in den Wahnsinn...
In ein Stringgrid lade ich eine CSV-Datei, die laut Notepad++ UTF8BOM kodiert ist,
was korrekt ist.
Danach iteriere ich durch das Grid und speichere bestimmte Daten in einer SQLITE-Datei.
Gibt es einem einem Text einen Umlaut, ist alles i.O.
Gibt es einem Text zwei Umlaute, wird anscheinend UTF8 ignoriert.
Die beiliegende Hardcopy zeigt oben das Stringgrid und unten ein DBGrid, das die
entsprechenden Daten im SQLITE-File wiedergibt.
Es ist egal, ob ich ZEOS benutze oder Datensätze per SQL in die Datenbank schreibe.
Das Problem ist auch nicht auf die gezeigten Datensätze beschränkt und ich kann
es beliebig reproduzieren.
Ist das ein Fehler?
Bin für jeden Hinweis dankbar.
- Dateianhänge
-
Liste.zip
- (148 Bytes) 78-mal heruntergeladen
-
- StringgridvsDBGrid.jpg (11.58 KiB) 2924 mal betrachtet
Re: Import SQLITE aus CSV: Umlauteproblem
Ohne und mit StringGrid geht das hier gut - habe das eben mal umgesetzt in einem Beispielprojekt und der von dir geposteten Datei. Ich sehe das hier nicht. (Windows 7, Lazarus 2.3.0 (rev main-2_3-1438-gb0f6b29ad8) FPC 3.2.2 x86_64-win64-win32/win64). Welches OS und welche Lazarus-/FPC-Version nutzt du?
Kannst du da ein Minimalbsp zusammenstellen?
Bsp. anbei (ohne DLL).
Kannst du da ein Minimalbsp zusammenstellen?
Bsp. anbei (ohne DLL).
- Dateianhänge
-
SqliteListe.zip
- (3.09 KiB) 91-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- BoraBora
- Beiträge: 50
- Registriert: So 11. Apr 2021, 16:00
- OS, Lazarus, FPC: FPC 3..2.2, L 2.2.0 , Linux Mint, WIN 10&11, Android,
- CPU-Target: xxBit
Re: Import SQLITE aus CSV: Umlauteproblem
Hallo Michl,
vielen Dank!
Dein Projekt kann nicht kompilieren- es kommt eine Fehlermeldung. Werde mich später damit beschäftigen.
Habe mal ein Minimalprojekt angehängt (der Code will keinen Preis für Schönheit gewinnen- es ging mir
nur darum, das Problem einzukreisen).
BTW: bin im Moment nur unter Windows unterwegs.
vielen Dank!
Dein Projekt kann nicht kompilieren- es kommt eine Fehlermeldung. Werde mich später damit beschäftigen.
Habe mal ein Minimalprojekt angehängt (der Code will keinen Preis für Schönheit gewinnen- es ging mir
nur darum, das Problem einzukreisen).
BTW: bin im Moment nur unter Windows unterwegs.
- Dateianhänge
-
CSV2SQLITE.zip
- (946.61 KiB) 97-mal heruntergeladen
Re: Import SQLITE aus CSV: Umlauteproblem
Hab gerade dein Projekt ausprobiert und kann keinen Fehler feststellen (Win 11, Laz main/trunk-FPC3.2.2-32 bit aber auch Laz 2.2.0-FPC3.2.2-32bit; ZEOS ist die Version 7.2.14 vom OPM). Bitte nenne die Versionen (OS, Laz, FPC, ZEOS), die du verwendest.BoraBora hat geschrieben: Mo 14. Mär 2022, 16:59 Habe mal ein Minimalprojekt angehängt (der Code will keinen Preis für Schönheit gewinnen- es ging mir
nur darum, das Problem einzukreisen).
BTW: bin im Moment nur unter Windows unterwegs.
Kein Problem, aber du solltest dir auch für solchen Quick-and-dirty-Code nicht angewöhnen, in Methoden einer Klasse (TForm1) auf eine Instanz der Klasse (Form1) Bezug zu nehmen - einfach weglassen. Also: "ZQuery1.ExecSQL" statt "Form1.ZQuery1.ExecSQL". Ich habe das hier schon mehrmals begründet und will es jetzt nicht wiederholen --> Forum-Suche.BoraBora hat geschrieben: Mo 14. Mär 2022, 16:59 (der Code will keinen Preis für Schönheit gewinnen [..]).
- BoraBora
- Beiträge: 50
- Registriert: So 11. Apr 2021, 16:00
- OS, Lazarus, FPC: FPC 3..2.2, L 2.2.0 , Linux Mint, WIN 10&11, Android,
- CPU-Target: xxBit
Re: Import SQLITE aus CSV: Umlauteproblem
Ich arbeite mit:
Zeos 7.2.8 (wenn ich das richtig interpretiere) und
Lazarus Version 2.0.12 mit FPC 3.2.0 unter WIN10 Pro
Zeos 7.2.8 (wenn ich das richtig interpretiere) und
Lazarus Version 2.0.12 mit FPC 3.2.0 unter WIN10 Pro
- BoraBora
- Beiträge: 50
- Registriert: So 11. Apr 2021, 16:00
- OS, Lazarus, FPC: FPC 3..2.2, L 2.2.0 , Linux Mint, WIN 10&11, Android,
- CPU-Target: xxBit
Re: Import SQLITE aus CSV: Umlauteproblem
Habe Zeos auf 7.2.14 aktualisiert- das brachte keine Verbesserung.
Interessanter Effekt: ändere ich einen Umlaut im CSV-File in z.B. ue ab,
wird der Text korrekt in die DB geschrieben...
Habe so ein Verhalten bisher noch nicht kennengelernt (aber man lernt ja nie aus
)
Interessanter Effekt: ändere ich einen Umlaut im CSV-File in z.B. ue ab,
wird der Text korrekt in die DB geschrieben...
Habe so ein Verhalten bisher noch nicht kennengelernt (aber man lernt ja nie aus

- Dateianhänge
-
- Bild.jpg (8.87 KiB) 2807 mal betrachtet
Re: Import SQLITE aus CSV: Umlauteproblem
Hast du schon mal mit
probiert?
Code: Alles auswählen
{$codepage UTF8}
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 359
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: Import SQLITE aus CSV: Umlauteproblem
Versuche es mal mit folgenden ZConnection1.Properties
Code: Alles auswählen
codepage=UTF8
controls_cp=CP_UTF8
- BoraBora
- Beiträge: 50
- Registriert: So 11. Apr 2021, 16:00
- OS, Lazarus, FPC: FPC 3..2.2, L 2.2.0 , Linux Mint, WIN 10&11, Android,
- CPU-Target: xxBit
Re: Import SQLITE aus CSV: Umlauteproblem
Vielen Dank Theo und Jorg3000,
beide Vorschläge haben leider nichts gebracht.
Habe Lazarus auf 2.2.0 (FPC 3.2.2) geupdated- auch ohne Verbesserung,
Ich lasse mir jetzt etwas anderes einfallen.
Nochmal vielen Dank für die Unterstützung!
beide Vorschläge haben leider nichts gebracht.
Habe Lazarus auf 2.2.0 (FPC 3.2.2) geupdated- auch ohne Verbesserung,
Ich lasse mir jetzt etwas anderes einfallen.
Nochmal vielen Dank für die Unterstützung!
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 359
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: Import SQLITE aus CSV: Umlauteproblem
Eine Sache hätte ich noch, die du mal ausprobieren könntest.
Der Unterschied ist, dass die interne Codepage des Strings dann nicht 0 ist (default UTF-8), sondern den tatsächlichen Wert für UTF8 (Konstante cp_utf8) hat.
Dieses SetCodepage() hatte bei mir mal bei einer ganz anderen Sache Erfolg, zu meiner Verwunderung.
Das SetCodepage() erst anwenden, wenn der String fertig gefüllt ist.
Code: Alles auswählen
var SQLBefehl: RawByteString;
...
SetCodepage(SQLBefehL,cp_utf8,false);
Form1.ZQuery1.SQL.Text := SQLBefehL;
Dieses SetCodepage() hatte bei mir mal bei einer ganz anderen Sache Erfolg, zu meiner Verwunderung.
Das SetCodepage() erst anwenden, wenn der String fertig gefüllt ist.
- BoraBora
- Beiträge: 50
- Registriert: So 11. Apr 2021, 16:00
- OS, Lazarus, FPC: FPC 3..2.2, L 2.2.0 , Linux Mint, WIN 10&11, Android,
- CPU-Target: xxBit
Re: Import SQLITE aus CSV: Umlauteproblem
Hallo Jorg3000,
vielen Dank!
Ich habe mir jetzt allerdings den Ansatz von Michl zu eigen gemacht
und der funktioniert perfekt.
Gruss BB
vielen Dank!
Ich habe mir jetzt allerdings den Ansatz von Michl zu eigen gemacht
und der funktioniert perfekt.
Gruss BB
Re: Import SQLITE aus CSV: Umlauteproblem
Nutzt du die 64 oder die 32 bit Version? (Lazarus und Sqlite)
Vor ein paar Wochen hatte ich das gleiche Problem. Bei der 64 Bit Version hatte ich ständig Probleme mit den Umlauten. Bei der 32 Bit Version nicht.
Ich konnte die Gründe nie herausfinden. Da sonst alles andere völlig identisch war.
Falls du es noch kannst: compilier das mal mit 32 version. Würde mich interessieren ob es dann funktioniert.
Voraussetzung ist natürlich, dass die ursprünglichen Umlaute noch "intakt" und nicht vorher schon "zerschossen" sind
Vor ein paar Wochen hatte ich das gleiche Problem. Bei der 64 Bit Version hatte ich ständig Probleme mit den Umlauten. Bei der 32 Bit Version nicht.
Ich konnte die Gründe nie herausfinden. Da sonst alles andere völlig identisch war.
Falls du es noch kannst: compilier das mal mit 32 version. Würde mich interessieren ob es dann funktioniert.
Voraussetzung ist natürlich, dass die ursprünglichen Umlaute noch "intakt" und nicht vorher schon "zerschossen" sind

- BoraBora
- Beiträge: 50
- Registriert: So 11. Apr 2021, 16:00
- OS, Lazarus, FPC: FPC 3..2.2, L 2.2.0 , Linux Mint, WIN 10&11, Android,
- CPU-Target: xxBit
Re: Import SQLITE aus CSV: Umlauteproblem
Hallo Epcop,
habe mein Programm mit der 32Bit-Version und der 32Bit-Version der
Sqlite.dll kompiliert und siehe da- alle Umlaute werden perfekt angezeigt.
Entweder hat die 64Bit-Sqlite.dll ein Problem und/oder die 64Bit-Version
von Lazarus. Leider fehlen mir aber die Kenntnisse, um in diese Richtung
weiter zu suchen.
Gruss BB
habe mein Programm mit der 32Bit-Version und der 32Bit-Version der
Sqlite.dll kompiliert und siehe da- alle Umlaute werden perfekt angezeigt.
Entweder hat die 64Bit-Sqlite.dll ein Problem und/oder die 64Bit-Version
von Lazarus. Leider fehlen mir aber die Kenntnisse, um in diese Richtung
weiter zu suchen.
Gruss BB
- BoraBora
- Beiträge: 50
- Registriert: So 11. Apr 2021, 16:00
- OS, Lazarus, FPC: FPC 3..2.2, L 2.2.0 , Linux Mint, WIN 10&11, Android,
- CPU-Target: xxBit
Re: Import SQLITE aus CSV: Umlauteproblem
Habe das jetzt so gemacht:
kompiliere mit 64Bit-Lazarus und 32Bit-Sqlite DLL und
die Umlaute werden all korrekt dargestellt.
BB
kompiliere mit 64Bit-Lazarus und 32Bit-Sqlite DLL und
die Umlaute werden all korrekt dargestellt.
BB
Re: Import SQLITE aus CSV: Umlauteproblem
Super, danke dir für deine Rückmeldung!
Ich hatte damals ewig gesucht, warum das so ist und war eine zufällige Entdeckung.
Hatte auch alles Mögliche mit den Zeichensätzen ausprobiert: Hat der Import den richtigen Zeichensatz, hat die DB den richtigen, ist bei Lazarus der richtige eingestellt, muss ich vielleicht irgendwo was encode/decoden.
Was mich allerdings überrascht ist, dass du die 64bit Lazarus mit 32Bit dll comilieren kannst. Aber schön, dass es funktioniert!
Ich habe mir in das Projektverzeichnis eine liesmich Datei abgelegt, mit der info, dass die Umlaute nur bei der 32 Version funktionieren. Weil wenn man in 12 Wochen wieder am Projekt arbeitet, wundert man sich wieder, warum die Umlaute nicht mehr funktionieren. Aber vielleicht funktioniert es in einer zukünftigen Version richtig.
Ich hatte damals ewig gesucht, warum das so ist und war eine zufällige Entdeckung.
Hatte auch alles Mögliche mit den Zeichensätzen ausprobiert: Hat der Import den richtigen Zeichensatz, hat die DB den richtigen, ist bei Lazarus der richtige eingestellt, muss ich vielleicht irgendwo was encode/decoden.
Was mich allerdings überrascht ist, dass du die 64bit Lazarus mit 32Bit dll comilieren kannst. Aber schön, dass es funktioniert!
Ich habe mir in das Projektverzeichnis eine liesmich Datei abgelegt, mit der info, dass die Umlaute nur bei der 32 Version funktionieren. Weil wenn man in 12 Wochen wieder am Projekt arbeitet, wundert man sich wieder, warum die Umlaute nicht mehr funktionieren. Aber vielleicht funktioniert es in einer zukünftigen Version richtig.