[Gelöst] SQLite3 und fpreport - Zeichenkodierung

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

[Gelöst] SQLite3 und fpreport - Zeichenkodierung

Beitrag von MacWomble »

Hallo,

ich hoffe mir kann jemand einen Tipp geben. Ich habe zwei SQLite-Datenbanken, nach dem gleichen Gusto aufgebaut. Wenn ich nun mit dem fp-Reportdesigner einen Bericht erstelle, funktioniert dies bei der einen DB einwandfrei, bei der zweiten bekomme ich für Text und Memo-Felder nur kryptische Ausgaben. Dies habe ich auf zwei Rechnern getestet. Ich vermute, dass hierfür irgendeine Einstellung in der SQLite-DB verantwortlich ist. Sind aber beide auf UTF-8 eingestellt, wie auch die Reports.
Leider kann ich die Datenbanken nicht hochladen, da die Daten nicht öffentlich sind.

Das ganze unter linux Mint 20.2 und DB Browser for SQLite erstellt.
Zuletzt geändert von MacWomble am Do 29. Jul 2021, 07:05, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Re: SQLite3 und fpreport

Beitrag von Linkat »

Hallo MacWomble,
ich habe zwar noch nie mit dem fpreport gearbeitet, aber versuche mal den Font von deinem Memo zu ändern. Dein Problem erinnert mich an ein ähnliches Problem, das ich hatte.

Code: Alles auswählen

Memo1.Font.Name:=...
Viel Erfolg.

Gruß, Linkat
Linux Mint 21; Lazarus 2.2.4 FPC 3.2.2; RaspiOS

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: SQLite3 und fpreport

Beitrag von MacWomble »

Danke, aber das hat auch nicht geholfen. Scheint mir mit der Kodierung zusammen zu hängen.

Ich habe mal von einer Tabelle Screens angelegt.
Report-Vorschau
Report-Vorschau
Report.png (52.61 KiB) 2612 mal betrachtet
Dateianhänge
SQL Browser.png
SQL Browser.png (68.85 KiB) 2612 mal betrachtet
Vorschau der Abfrage in fpReport
Vorschau der Abfrage in fpReport
Vorschau.png (25.8 KiB) 2612 mal betrachtet
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: SQLite3 und fpreport

Beitrag von shokwave »

Sieht aus, als wäre die Spalte Bezeichnung mit Base64 codiert. Kann das sein?
mfg Ingo

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: SQLite3 und fpreport

Beitrag von MacWomble »

Ich habe keine Ahnung, wo ich die Kodierung umgestellt haben sollte. Die Datenbank habe ich angelegt, wie alle anderen auch (und diese funktionieren) - ausserdem werden die Daten in der Datenvorschau ja auch richtig angezeigt.

Ich habe einfach eine Tabelle angelegt und die Datensätze eingetippt. Kann also auch nichts mit den Daten rein gekommen sein.

Code: Alles auswählen

CREATE TABLE "Abteilung" (
	"ID"	INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
	"Bezeichnung"	TEXT,
	"FlukeNr"	INTEGER
)
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: SQLite3 und fpreport

Beitrag von gladio »

Kannst du das Verhalten auch mal mit z.B. Lazreport testen?
Wenn das da nicht auftritt, kannst du die Fehlerquelle Datenbank ausschließen.

Hat vielleicht nichts damit zu tun:
Warum ist das Feld 'Bezeichnung' als TEXT definiet und nicht als VARCHAR() ?
Sieht nicht so aus als ob da ein unendlich langer Text rein soll.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: SQLite3 und fpreport

Beitrag von MacWomble »

Text, weil ich mit dem SQLite-Browser keine andere Auswahl habe ...

Each column in an SQLite 3 database is assigned one of the following type affinities:

TEXT
NUMERIC
INTEGER
REAL
BLOB

Mit Lazreport muss ich mal versuchen. Es irritiert mich halt, dass es gerade mit dieser einen Datenbank auftritt, nicht mit den anderen ...
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: SQLite3 und fpreport

Beitrag von charlytango »

MacWomble hat geschrieben:
Mi 28. Jul 2021, 19:49
Text, weil ich mit dem SQLite-Browser keine andere Auswahl habe ...
Mit HeidiSQL kann man Varchar als Feldtyp auswählen und bei DB Browser for SQLite zeigt das Dropdown zwar die 5 Typen zur Auswahl, man kann aber zB "varchar(30)" einfach direkt ins Dropdown-Feld rein schreiben und das wird auch so akzeptiert.
Wohlgemerkt - unter Windows. Ob es das unter Linux auch gibt weiß ich nicht. Doch vielleicht klappt es einfach indem man den gewünschten Typ direkt ins Feld rein schreibt.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: SQLite3 und fpreport

Beitrag von MacWomble »

Das kann ich gerne testen - Danke.

Nachtrag:

Tatsächlich löst dein Tipp mein Problem. Ich habe jetzt VarChar(30) eingetragen und es wird nun richtig angezeigt. Erklärbar ist mir das ganze jedoch nicht, da es ja mit anderen Datenbanken funktioniert,

Jedenfalls vielen Dank für die Hilfen!
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Ich934
Lazarusforum e. V.
Beiträge: 317
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: SQLite3 und fpreport

Beitrag von Ich934 »

MacWomble hat geschrieben:
Do 29. Jul 2021, 06:11
Tatsächlich löst dein Tipp mein Problem. Ich habe jetzt VarChar(30) eingetragen und es wird nun richtig angezeigt. Erklärbar ist mir das ganze jedoch nicht, da es ja mit anderen Datenbanken funktioniert,
Ich vermute mal, fpreport hat ein Problem mit dem typeless von SQLite. SQLite kennt intern nur fünf Datentypen. Das sind die oben genannten die zu auswählen kannst. Mehr gibt es erst mal nicht und mehr verwendet SQLite nicht. Das Problem hierbei ist, dass dann z.B. ein kurzer Text auch als "TEXT" und somit als "(MEMO)" zurück kommt und entsprechend behandelt werden muss. Entweder man macht ein Type-Casting oder arbeitet direkt mit dem Memo-Werten (Zahlen etc. dann analog).

SQLite versteht auch andere Werte (z.B. VARCHAR) und wandelt diese dann intern auf die eigenen Datentypen um. Das ist gedacht, um zum einen eine Migration von/zu einer anderen Datenbank zu erleichtern und zum anderen um auch die Absicht der Speicherung besser zu dokumentieren. Also du als Entwickler kannst damit verdeutlichen, dass es sich um eine 20-stelliger Zeichenkette handelt wenn du VARCHAR(20) verwendest, obwohl intern dann wieder TEXT verwendet wird.

fpreport hat eventuell einfach ein Problem mit dem Memo-Wert und stellt diesen so "verhunzt" dar. Warum allerdings Base64-kodiert ist schon etwas komisch, aber gut, ich verstehe auch nicht alles.

Quellen:
Datatypes in SQLite Version 3, 3. Type Affinity
Datatypes In SQLite Version 2, 1.0 Typelessness
Tipp für PostgreSQL: www.pg-forum.de

Antworten