Datenbank Umlaute

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
VB_Lazarus
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

Beitrag von VB_Lazarus »

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ß

Groffy
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

Beitrag von Groffy »

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

VB_Lazarus
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

Beitrag von VB_Lazarus »

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ß

Groffy
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

Beitrag von Groffy »

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

mschnell
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

Beitrag von mschnell »

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

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

Re: Datenbank Umlaute

Beitrag von theo »

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

Groffy
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

Beitrag von Groffy »

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

VB_Lazarus
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

Beitrag von VB_Lazarus »

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.
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ß

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Datenbank Umlaute

Beitrag von hde »

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

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

Re: Datenbank Umlaute

Beitrag von theo »

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.

mschnell
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

Beitrag von mschnell »

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

Antrepolit
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

Beitrag von Antrepolit »

Das Problem löst du mit

Code: Alles auswählen

UTF8ToConsole(String)
. Details findest du hier: http://nobytes.blogspot.de/2013/08/lazarus-ide-oracle-11g-and-german.html.
Grüße, Antrepolit

care only if your os is really burning

VB_Lazarus
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

Beitrag von VB_Lazarus »

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.

VB_Lazarus
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

Beitrag von VB_Lazarus »

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:
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ß

gocher
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

Beitrag von gocher »

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

Antworten