Delphi-PRAXiS
Seite 1 von 2  1 2   

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 Uhr.
Seite 1 von 2  1 2   

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