Datenbank Umlaute
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
Datenbank Umlaute
Hallo,
habe folgendes Problem:
Wenn ich Umlaute (äüö usw.) in die Datenbank schreibe, werden die Werte nicht als Umlaute gespeichert.
D.h. wenn ich die Datenbank i aufmache stehen andere Zeichen drin.
In meiner Oberfläche (DBGrid, DBEdit) werden die Umlaute richtig dargestellt.
Was muss ich machen, damit die Daten auch richtig in der DB dargestellt werden?
Ich habe schon viele Postings durchgelesen (z.B. ODBCConnect "Char Set = UTF8 usw.), aber nichts hat bisher geholfen.
Was ich herausgefunden habe, MS Access erwartet anscheinend ANSI.
Lazarus macht unter Windows alles in UTF8.
Es gäbe noch die Möglichkeit alles mit GetText abzufangen und von ANSI nach UTF8 zu konvertieren.
Habe das noch nicht ausprobiert.
Ach, noch was, ich habe das auch mit SQLite ausprobiert.
Dort werden die Umlaute auch nicht richtig in der DB dargestellt.
Datenbank: MS Access
Anbindung: ODBC
Controls: SQLDB
Danke.
Gruß
habe folgendes Problem:
Wenn ich Umlaute (äüö usw.) in die Datenbank schreibe, werden die Werte nicht als Umlaute gespeichert.
D.h. wenn ich die Datenbank i aufmache stehen andere Zeichen drin.
In meiner Oberfläche (DBGrid, DBEdit) werden die Umlaute richtig dargestellt.
Was muss ich machen, damit die Daten auch richtig in der DB dargestellt werden?
Ich habe schon viele Postings durchgelesen (z.B. ODBCConnect "Char Set = UTF8 usw.), aber nichts hat bisher geholfen.
Was ich herausgefunden habe, MS Access erwartet anscheinend ANSI.
Lazarus macht unter Windows alles in UTF8.
Es gäbe noch die Möglichkeit alles mit GetText abzufangen und von ANSI nach UTF8 zu konvertieren.
Habe das noch nicht ausprobiert.
Ach, noch was, ich habe das auch mit SQLite ausprobiert.
Dort werden die Umlaute auch nicht richtig in der DB dargestellt.
Datenbank: MS Access
Anbindung: ODBC
Controls: SQLDB
Danke.
Gruß
-
- Beiträge: 50
- Registriert: Fr 23. Nov 2012, 13:27
- OS, Lazarus, FPC: Win10/Linux Mint - Lazarus 2.2/trunk
- CPU-Target: 32/64Bit
Re: Datenbank Umlaute
Vermutlich speicherst Deine Anwendung die Umlaute im Unicode Format ab (UTF8 ?), und die Datenbankoberfläche mit der Du parallel in die Datenbank schaust, interpretiert den Characterset falsch.VB_Lazarus hat geschrieben: wenn ich die Datenbank i aufmache stehen andere Zeichen drin.
Beste Grüße
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
Re: Datenbank Umlaute
Danke, für die Antwort.
Ich schaue mit der Originalsoftware (MSAccess) in die Datenbank.
Das Problem was ich habe ist, wenn ich eine SQL-Filter starte, wo diese Umlaute drin sind, dann wird nicht richtig gefiltert.
Ich bekomme immer eine leere Query.
Gruß
Ich schaue mit der Originalsoftware (MSAccess) in die Datenbank.
Das Problem was ich habe ist, wenn ich eine SQL-Filter starte, wo diese Umlaute drin sind, dann wird nicht richtig gefiltert.
Ich bekomme immer eine leere Query.
Gruß
-
- Beiträge: 50
- Registriert: Fr 23. Nov 2012, 13:27
- OS, Lazarus, FPC: Win10/Linux Mint - Lazarus 2.2/trunk
- CPU-Target: 32/64Bit
Re: Datenbank Umlaute
Hab mal für Dich ein wenig gegoogelt. Schau mal hier, speziell die längere Ausführung von Sylvain Lafontaine :
http://social.msdn.microsoft.com/Forums ... =accessdev
So wie ich das auf die Schnelle verstanden habe, benutzt MsAccess eine Art von UTF16 Code. Leider scheint es so zu sein, dass man unter Win7 ODBC keinen abweichenden Verbindungszeichensatz angeben kann. Ich vermute die Query schlägt fehl, weil Lazarus den Suchparameter im UTF8(?) Format zur Datenbank schickt, diese aber in der Query das Stringfeld jeweils im UTF16 Format liest. Aber hier fange ich auch an zu raten, weil ich keine konkrete Erfahrung in der Kombination Lazarus/MsAccess habe. Ich arbeite mit der Firebird SQL Datenbank, und da kann es auch ähnliche Probleme geben wenn man nicht auf die korrekten Charactersets achtet.
Beste Grüße
http://social.msdn.microsoft.com/Forums ... =accessdev
So wie ich das auf die Schnelle verstanden habe, benutzt MsAccess eine Art von UTF16 Code. Leider scheint es so zu sein, dass man unter Win7 ODBC keinen abweichenden Verbindungszeichensatz angeben kann. Ich vermute die Query schlägt fehl, weil Lazarus den Suchparameter im UTF8(?) Format zur Datenbank schickt, diese aber in der Query das Stringfeld jeweils im UTF16 Format liest. Aber hier fange ich auch an zu raten, weil ich keine konkrete Erfahrung in der Kombination Lazarus/MsAccess habe. Ich arbeite mit der Firebird SQL Datenbank, und da kann es auch ähnliche Probleme geben wenn man nicht auf die korrekten Charactersets achtet.
Beste Grüße
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Datenbank Umlaute
"MS ACCESS" ist ein mit Datenbanken arbeitendes Benutzer-Programm, das unterschiedlichen Datenbanken ansprechen kann. Vermutlich meinst Du die mit Windows gelieferte "Jet Engine" -> http://de.wikipedia.org/wiki/Microsoft_Jet_EngineVB_Lazarus hat geschrieben:Was ich herausgefunden habe, MS Access erwartet anscheinend ANSI.
Aber auch was die intern macht ist vermutlich nicht relevant, weil Du wahrscheinlich nicht direkt mit der DLL kommunizierst. Du musst die richtige Zeichen-Codierung entsprechend der Library herstellen, die Du für den Zugriff verwendest.
Nicht nur unter Windows (sonst wäre es mit der Poprtabilität schwierig).VB_Lazarus hat geschrieben:Lazarus macht unter Windows alles in UTF8.
-Michael
Re: Datenbank Umlaute
Und warum nicht?VB_Lazarus hat geschrieben: Es gäbe noch die Möglichkeit alles mit GetText abzufangen und von ANSI nach UTF8 zu konvertieren.
Habe das noch nicht ausprobiert.
http://forum.lazarus.freepascal.org/ind ... l#msg93369
-
- Beiträge: 50
- Registriert: Fr 23. Nov 2012, 13:27
- OS, Lazarus, FPC: Win10/Linux Mint - Lazarus 2.2/trunk
- CPU-Target: 32/64Bit
Re: Datenbank Umlaute
Das reine schreiben/lesen scheint ja zu funktionieren, zumindestens was die korrekte Verarbeitung der deutschen Umlaute angeht, was ist aber mit den String Parametern einer Query? Die müßten dann doch auch auf ANSI String konvertiert werden...?
Beste Grüße
Beste Grüße
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
Re: Datenbank Umlaute
Erst mal danke, für die vielen Antworten.
MSAccess: Ich habe das Programm für die Erstellung der Datenbank verwendet.
Die Anbindung der Datenbank habe ich über die ODBC32.dll gemacht.
Ich nehme an, das die mit der JET-Engine kommuniziert.
Leider hat keine dieser Abfragen zum gewünschten Ergebnis geführt
Ich habe in der Anwendung 7 DBGrids und min genausoviele DBEdit's.
Es wäre für die Perfomance des Programmes nicht förderlich.
Aber ich werde dieses auf jedenfall mal probieren.
Was mich bei dieser ganzen Datenbankprogrmmierung halt stutzig macht, es scheint keiner zu brauchen, sonst wäre ja schon mehr Leute auf dieses Problem gestossen und es gäbe schon eine Lösung.
Gruß
MSAccess: Ich habe das Programm für die Erstellung der Datenbank verwendet.
Die Anbindung der Datenbank habe ich über die ODBC32.dll gemacht.
Ich nehme an, das die mit der JET-Engine kommuniziert.
Mit der Query, habe ich schon versucht in verschiedene Formatierung (ANISToUTF8...usw.) auszuführen.mschnell hat geschrieben:"MS ACCESS" ist ein mit Datenbanken arbeitendes Benutzer-Programm, das unterschiedlichen Datenbanken ansprechen kann. Vermutlich meinst Du die mit Windows gelieferte "Jet Engine" -> http://de.wikipedia.org/wiki/Microsoft_Jet_EngineVB_Lazarus hat geschrieben:Was ich herausgefunden habe, MS Access erwartet anscheinend ANSI.
Aber auch was die intern macht ist vermutlich nicht relevant, weil Du wahrscheinlich nicht direkt mit der DLL kommunizierst. Du musst die richtige Zeichen-Codierung entsprechend der Library herstellen, die Du für den Zugriff verwendest.Nicht nur unter Windows (sonst wäre es mit der Poprtabilität schwierig).VB_Lazarus hat geschrieben:Lazarus macht unter Windows alles in UTF8.
-Michael
Leider hat keine dieser Abfragen zum gewünschten Ergebnis geführt
Groffy hat geschrieben:Das reine schreiben/lesen scheint ja zu funktionieren, zumindestens was die korrekte Verarbeitung der deutschen Umlaute angeht, was ist aber mit den String Parametern einer Query? Die müßten dann doch auch auf ANSI String konvertiert werden...?
Beste Grüße
Es war gestern spät und ich müsste alle Texte von Feldern entsprechend abfangen.theo hat geschrieben:Und warum nicht?VB_Lazarus hat geschrieben: Es gäbe noch die Möglichkeit alles mit GetText abzufangen und von ANSI nach UTF8 zu konvertieren.
Habe das noch nicht ausprobiert.
http://forum.lazarus.freepascal.org/ind ... l#msg93369
Ich habe in der Anwendung 7 DBGrids und min genausoviele DBEdit's.
Es wäre für die Perfomance des Programmes nicht förderlich.
Aber ich werde dieses auf jedenfall mal probieren.
Was mich bei dieser ganzen Datenbankprogrmmierung halt stutzig macht, es scheint keiner zu brauchen, sonst wäre ja schon mehr Leute auf dieses Problem gestossen und es gäbe schon eine Lösung.
Gruß
Re: Datenbank Umlaute
ODBC --> MSAccess wird wohl kaum noch benutzt, stattdessen Zeos --> SQL-DBsVB_Lazarus hat geschrieben:Was mich bei dieser ganzen Datenbankprogrmmierung halt stutzig macht, es scheint keiner zu brauchen, sonst wäre ja schon mehr Leute auf dieses Problem gestossen und es gäbe schon eine Lösung.
hde
Re: Datenbank Umlaute
Sehe ich auch so. Kommt noch hinzu, dass viele hier auf Linux sind (ich z.B.) und einfach durchgängig UTF-8 benutzen.hde hat geschrieben: ODBC --> MSAccess wird wohl kaum noch benutzt, stattdessen Zeos --> SQL-DBs
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Datenbank Umlaute
Wenn ich eine Diskussion von vor ein paar Wochen richtig im Kopf habe, gehthde hat geschrieben:ODBC --> MSAccess wird wohl kaum noch benutzt, stattdessen Zeos --> SQL-DBshde
Zeos --> ODBC -->Jet-Engine durchaus.
Es ist zu hoffen, dass Zeos die Zeichen-Encodierung korrekt behandelt.
-Michael
-
- Beiträge: 340
- Registriert: Di 12. Sep 2006, 08:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Re: Datenbank Umlaute
Das Problem löst du mit . Details findest du hier: http://nobytes.blogspot.de/2013/08/laza ... erman.html.
Code: Alles auswählen
UTF8ToConsole(String)
Grüße, Antrepolit
care only if your os is really burning
care only if your os is really burning
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
Re: Datenbank Umlaute
Also bleibt der einzige Ausweg es mit den ZEOS Komponenten die Datenbank anzubinden.
Schade, ich wollte bei den Original-Komponenten bleiben.
Warum wird MSAccess so selten verwendet.
Wenn ich unter Windows Arbeite ist eine Anbindung an Office mit dieser Datenbank sehr einfach.
Ich danke allen für die Hilfe.
Schade, ich wollte bei den Original-Komponenten bleiben.
Warum wird MSAccess so selten verwendet.
Wenn ich unter Windows Arbeite ist eine Anbindung an Office mit dieser Datenbank sehr einfach.
Ich danke allen für die Hilfe.
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
Re: Datenbank Umlaute
So, habe eine kleine Lösung.
Wenn ich den Text mit SQL auslese und einem TEdit zuweise, muss ich die Funktion UTF8Encode verwenden.
Wenn ich in die Datenbank schreibe muss ich UTF8Decode verwenden.
Jetzt sind die Umlaute sichtbar.
Ich habe noch eine Frage an theo:
Dies kann aber nur dann gemacht werden, wenn eine aktive Verbindung zur DB existiert.
Die habe ich leider nicht und mit ODBC funktioniert so eine Verbindung in der Entwicklungsumgebung nicht (nach meinem Wissensstand).
Wie kann ich das trotzdem, eventuell zur Laufzeit erzeugen, damit ich die Umlaute auch in meinem DBGrid sehe?
Gruß
Wenn ich den Text mit SQL auslese und einem TEdit zuweise, muss ich die Funktion UTF8Encode verwenden.
Wenn ich in die Datenbank schreibe muss ich UTF8Decode verwenden.
Jetzt sind die Umlaute sichtbar.
Ich habe noch eine Frage an theo:
Du hast den Link gesendet, wo beschrieben wird wie mann Felder zuordnen kann.theo hat geschrieben:Und warum nicht?VB_Lazarus hat geschrieben: Es gäbe noch die Möglichkeit alles mit GetText abzufangen und von ANSI nach UTF8 zu konvertieren.
Habe das noch nicht ausprobiert.
http://forum.lazarus.freepascal.org/ind ... l#msg93369
Dies kann aber nur dann gemacht werden, wenn eine aktive Verbindung zur DB existiert.
Die habe ich leider nicht und mit ODBC funktioniert so eine Verbindung in der Entwicklungsumgebung nicht (nach meinem Wissensstand).
Wie kann ich das trotzdem, eventuell zur Laufzeit erzeugen, damit ich die Umlaute auch in meinem DBGrid sehe?
Gruß
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Datenbank Umlaute
Wie greifst Du denn auf die Daten zu, existiert da eine Komponente, benutzt Du ADODB_TLB oder COM, oder...?
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me