Datenbank Umlaute
-
- Beiträge: 90
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
- CPU-Target: 32Bit
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
VB_Lazarus hat geschrieben:wenn ich die Datenbank i aufmache stehen andere Zeichen drin.
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.
Beste Grüße
-
- Beiträge: 90
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
- CPU-Target: 32Bit
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
VB_Lazarus hat geschrieben:Was ich herausgefunden habe, MS Access erwartet anscheinend ANSI.
"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_Engine
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.
VB_Lazarus hat geschrieben:Lazarus macht unter Windows alles in UTF8.
Nicht nur unter Windows (sonst wäre es mit der Poprtabilität schwierig).
-Michael
Re: Datenbank Umlaute
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.
Und warum nicht?
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: 90
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
- CPU-Target: 32Bit
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.
Mit der Query, habe ich schon versucht in verschiedene Formatierung (ANISToUTF8...usw.) auszuführen.
Leider hat keine dieser Abfragen zum gewünschten Ergebnis geführt
Es war gestern spät und ich müsste alle Texte von Feldern entsprechend abfangen.
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.
mschnell hat geschrieben:VB_Lazarus hat geschrieben:Was ich herausgefunden habe, MS Access erwartet anscheinend ANSI.
"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_Engine
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.VB_Lazarus hat geschrieben:Lazarus macht unter Windows alles in UTF8.
Nicht nur unter Windows (sonst wäre es mit der Poprtabilität schwierig).
-Michael
Mit der Query, habe ich schon versucht in verschiedene Formatierung (ANISToUTF8...usw.) auszuführen.
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
theo hat geschrieben: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.
Und warum nicht?
http://forum.lazarus.freepascal.org/ind ... l#msg93369
Es war gestern spät und ich müsste alle Texte von Feldern entsprechend abfangen.
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
VB_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.
ODBC --> MSAccess wird wohl kaum noch benutzt, stattdessen Zeos --> SQL-DBs
hde
Re: Datenbank Umlaute
hde hat geschrieben:ODBC --> MSAccess wird wohl kaum noch benutzt, stattdessen Zeos --> SQL-DBs
Sehe ich auch so. Kommt noch hinzu, dass viele hier auf Linux sind (ich z.B.) und einfach durchgängig UTF-8 benutzen.
-
- 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
hde hat geschrieben:ODBC --> MSAccess wird wohl kaum noch benutzt, stattdessen Zeos --> SQL-DBshde
Wenn ich eine Diskussion von vor ein paar Wochen richtig im Kopf habe, geht
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/lazarus-ide-oracle-11g-and-german.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: 90
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
- CPU-Target: 32Bit
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: 90
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
- CPU-Target: 32Bit
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:
Du hast den Link gesendet, wo beschrieben wird wie mann Felder zuordnen kann.
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:
theo hat geschrieben: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.
Und warum nicht?
http://forum.lazarus.freepascal.org/ind ... l#msg93369
Du hast den Link gesendet, wo beschrieben wird wie mann Felder zuordnen kann.
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