Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQLite verfälscht Umlaute (https://www.delphipraxis.net/191683-sqlite-verfaelscht-umlaute.html)

sko1 10. Feb 2017 06:53

Datenbank: SQLite • Version: 3.5.1 • Zugriff über: TFDQuery

SQLite verfälscht Umlaute
 
Hallo,

ich habe einen "komischen Effekt":

folgende Anweisung:

Delphi-Quellcode:
'INSERT INTO material VALUES (''001'',''001985'',''ELZUBEHOER'',''Hakennägel 50 mm'',''St'',0.02,0.02,0.02,'''') '


ergibt in der Datenbank, wenn ich sie mit SQLite-Admin ansehe den Text 'Hakennägel 50 mm', die Umlaute sind also kaputt, nur warum bzw. was muss ich wo umstellen dass die Umlaute korrekt eingetragen werden?

Setze ich ein einzelnes Feld per
Delphi-Quellcode:
FDQUery.FieldByName('Name').asString := 'Lieschen Müller"


stehen da die Umlaute korrekt drin!

Ciao
Stefan

Nachtrag:
falls es wichtig ist, die Erzeugung der Tabelle:

Delphi-Quellcode:
'CREATE TABLE material (lief VARCHAR(3),matnr VARCHAR(20),such VARCHAR(30),kurztext VARCHAR(80),me VARCHAR(5),vk1 DECIMAL(10,2),vk2 DECIMAL(10,2),vk3 DECIMAL(10,2),langtext TEXT) '

hoika 10. Feb 2017 07:24

AW: SQLite verfälscht Umlaute
 
Hallo,
Hakennägel

Das ist Unicode.

Da ich mich mit SQLite nicht auskenne, kann ich nicht mehr dazu sagen als "Immer Parameter benutzen".

haentschman 10. Feb 2017 07:24

AW: SQLite verfälscht Umlaute
 
Moin...:P
Zitat:

'INSERT INTO material VALUES (''001'',''001985'',''ELZUBEHOER'',''Hakennägel 50 mm'',''St'',0.02,0.02,0.02,'''') '
...bitte nicht. :? Die Hochkommaorgie ist nicht mehr uptodate. :thumb: Hast du schon mal was von SQL Injection gehört? :? https://de.wikipedia.org/wiki/SQL-Injection
Zitat:

FDQUery.FieldByName('Name').asString := 'Lieschen Müller"
...korrekt ohne Probleme, warum drüber nachdenken? 8-)

Bernhard Geyer 10. Feb 2017 07:28

AW: SQLite verfälscht Umlaute
 
Zitat:

Zitat von sko1 (Beitrag 1361224)
wenn ich sie mit SQLite-Admin ansehe den Text 'Hakennägel 50 mm', die Umlaute sind also kaputt, nur warum bzw. was muss ich wo umstellen dass die Umlaute korrekt eingetragen werden?

Sind nicht "richtig" kaputt sondern du hast mit deinen Zugriffskomponenten ein (UTF8-)Codierungsprobleme.

Kann es sein das deine DB eine ANSI-Codierung verwendet und die FireDacs auf UTF8 eingestellt sind?

sko1 10. Feb 2017 07:46

AW: SQLite verfälscht Umlaute
 
Danke erst mal für die Antworten!

Zitat:

Kann es sein das deine DB eine ANSI-Codierung verwendet und die FireDacs auf UTF8 eingestellt sind?
Wo kann ich das erkennen und wie kann ich es umstellen?

Zitat:

Hast du schon mal was von SQL Injection gehört?
Ja irgendwie ganz weit weg...
Wo aber soll das Problem sein, es ist eine kleine Datenbank auf dem Handy die ein paar Benutzereingaben speichert...

Ciao
Stefan

haentschman 10. Feb 2017 08:10

AW: SQLite verfälscht Umlaute
 
Hallöle...:P
Zitat:

Wo aber soll das Problem sein, es ist eine kleine Datenbank auf dem Handy die ein paar Benutzereingaben speichert...
...was kostet es mehr wenn man es gleich richtig macht. :gruebel:

PS: Hinterlege mal deine Delphi Version im Profil... Danke. :wink:

sko1 10. Feb 2017 08:45

AW: SQLite verfälscht Umlaute
 
Delphi-Version ist im Profil hinterlegt :)

Was mir jetzt noch aufgefallen ist:
Im SQLite-Admin sind die Umlaute falsch, DB-Browser for SQLite richtig!

Lese ich aber den Inhalt eines Feldes (FDQuery.FieldByName('Benutzer').asString) aus kommen die falschen Umlaute zurück...

Ciao
Stefan

sko1 10. Feb 2017 09:02

AW: SQLite verfälscht Umlaute
 
Es kommt noch schlimmer:

Nach dem Import der Daten (sie oben INSERT...) steht in der Datenbank
"Hakennägel 50 mm"

lese ich das aus sieht es im Debugger in der IDE sauber aus ("Hakennägel") und schreibe genau dieses wieder woanders in die Datenbank, wird daraus

"Hakennägel 50 mm"

Der DB Browser für SQLite zeigt an dieser Stelle
"Hakennägel 50 mm"

an.

Ich kenne mich bei der ganzen Codepage-Geschichte nicht aus und brauche dringend Hilfe!

Ich mach scheinbar generell etwas falsch, aber was?

Ciao
Stefan

jobo 10. Feb 2017 09:16

AW: SQLite verfälscht Umlaute
 
Es gibt wahrscheinlich keinen Zaubertipp, mit dem auf einen Schlag alles richtig erscheint.

Problematik:
Jedes Tool (kann) macht es anders mit der Codierung.
Je mehr Varianten Du probierst, desto mehr Varianten werden Dir vermutlich angezeigt.
Prinzip: Ein Tool, eine Codierung, writeToDB, readFromDB, eine Codierung, Ausgabe (Darstellung) entspricht Eingabe.

Dieses Prinzip kann bereits gebrochen werden, wenn das eine Tool eine ungewöhnliche, falsche Codierung verwendet, die andere Tools nicht können/unterstützen.

Um aus der Nummer rauszukommen, startest Du mit einer leeren SQLite Datei und einem ordentlichen Tool. Datenbefüllung durchführen, Codierung prüfen, Abruf prüfen.

Wenn das richtig und konstitent ist und auch für wirkliche Unicode Zeichen funktioniert, dann hängst Du Dein Programm dran.
Verdächtig in dem Programm sind jegliche Codeteile, die "manuelles" Stringhandling machen, aber singlebyte basiert sind.
Außerdem verdächtig sind Darstellungen, die keine Unicode fähigen Anzeigekomponenten und Character Sets(!) verwenden.
Letzteres bedeutet nur, dass zwar alles richtig verarbeitet wird, die reine Darstellung in Deinem Programm aber nicht funktioniert.

sko1 10. Feb 2017 09:21

AW: SQLite verfälscht Umlaute
 
Nun ja, im Prinzip habe ich das ja nun mehrfach durch

- leere Datenbank
- Füllen per viele "INSERT..." in meinem Programm
- Lesen aus der Datenbank (Debugger zeigt "Hakennägel")
- Schreiben von "Hakennägel"
- zurücklesen "Hakennägel"

alles mit der gleichen TFDConnection und TFDQuery

Ciao
Stefan

Der schöne Günther 10. Feb 2017 09:36

AW: SQLite verfälscht Umlaute
 
Liste der Anhänge anzeigen (Anzahl: 1)
Dumme Idee, hat das hier etwas damit zu tun?

jobo 10. Feb 2017 09:52

AW: SQLite verfälscht Umlaute
 
Zitat:

Zitat von sko1 (Beitrag 1361244)
Nun ja, im Prinzip habe ich das ja nun mehrfach durch

Nun ja, im Prinzip müsste es dann funktionieren.
;)

Ich arbeite nicht mit diesen Komponenten, daher kann ich nur allgemeine Tipps geben. Der Vorschlag von ..Günther ist sicher einen Blick wert.
Ansonsten machst Du irgendwo auf der beschrieben Strecke, die Du "im Prinzip" machst, etwas falsch.

hoika 10. Feb 2017 09:54

AW: SQLite verfälscht Umlaute
 
Hallo,
ja, und warum nimmst du dann weiterhin keine Parameter?
Und ja, Günther zeigt genau die Stelle, die man ändern könnte
(Umstellen auf ANSI).

Monday 10. Feb 2017 11:52

AW: SQLite verfälscht Umlaute
 
Arbeiten kann man in Delphi auch noch mit AnsiToUTF8() (bzw. UTF8ToAnsi() ). Kann sein, dass nur SQLite das so darstellt, aber sonst richtig gespeichert ist. Dann ist es nur ein Schönheitsfehler.

p80286 10. Feb 2017 12:44

AW: SQLite verfälscht Umlaute
 
Zitat:

Zitat von sko1 (Beitrag 1361244)
Nun ja, im Prinzip habe ich das ja nun mehrfach durch

- leere Datenbank
- Füllen per viele "INSERT..." in meinem Programm
- Lesen aus der Datenbank (Debugger zeigt "Hakennägel")
- Schreiben von "Hakennägel"
- zurücklesen "Hakennägel"

alles mit der gleichen TFDConnection und TFDQuery

Bei Lesen aus der Datenbank solltest Du z.b Dir die HexWerte des fraglichen Feldes zurück geben lassen. Dann sollte eine irgendwie geartete Interpretation der Daten nicht erfolgen. Und daran kann man dann feststellen wie "Lieschen Müller" oder die "Hakennägel" in der Datenbank vorliegen.
Und dann solltest du natürlich alle Codierungseinstellungen Deiner DB überprüfen. Es soll Datenbanken geben, die für die Eingabe eine andere Codierung als für die Speicherung, und wiederum eine andere Codierung für die Ausgabe nutzen. Weiß man nicht was da Sache ist, dann doktert man nur an irgendwelchen Symptomen herum anstatt ein sauberes Konzept zu erstellen.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz