Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Mit ZeosLib umlaute in SQLite3 DB schreiben (https://www.delphipraxis.net/155789-mit-zeoslib-umlaute-sqlite3-db-schreiben.html)

Kostas 8. Nov 2010 14:33

Datenbank: SQLite • Version: 3 • Zugriff über: ZeosLib 6.6.6-stable

Mit ZeosLib umlaute in SQLite3 DB schreiben
 
Hallo Zusammen,

für ein bestimmtes Projekt muss ich Daten in einer SQLite3 DB schreiben.
Die Daten enthalten Umlaute. Die DB wird dann mit C# ausgelessen, dabei werden die
Umlaute falsch Encoded. Vermutlich schreibt ZeosLib die Daten in ANSI. Ich benötige
die Daten jedoch in UTF8 Kodierung. Hat jemand eine Idee wie ich die ZeosLib
beibringen kann dass er in UTF8 die Daten schreibt?

Gruß Kostas

seifman 8. Nov 2010 15:07

AW: Mit ZeosLib umlaute in SQLite3 DB schreiben
 
Es gibt in Delphi die Funktion "AnsiToUtf8()" und das Pendant "Utf8ToAnsi" in der System.pas.

Kostas 16. Nov 2010 15:53

AW: Mit ZeosLib umlaute in SQLite3 DB schreiben
 
Super, genau das ist es.
Tausend Dank und einen schönen Tag.

Gruß Kostas

mschaefer 16. Nov 2010 17:12

AW: Mit ZeosLib umlaute in SQLite3 DB schreiben
 
Bei Anlage der SQLite-DB kann man auch den Zeichensatz angeben.
Bei mir geht Zeos auch mit Umlauten und ohne sonstige Konvertierung.

Grüße

Kostas 17. Nov 2010 00:55

AW: Mit ZeosLib umlaute in SQLite3 DB schreiben
 
Hi Martin,

hast du zufällig die syntax parat?
Ich habe unter TZConnection.Properies den
Eintrag: PRAGMA encoding = "UTF-8"
hat jedoch nicht gebracht. Vermutlich ist nur die Syntax falsch.

Gruß Kostas

Sir Rufo 17. Nov 2010 01:41

AW: Mit ZeosLib umlaute in SQLite3 DB schreiben
 
Das hilft dir nichts, denn
Zitat:

Zitat von mschaefer (Beitrag 1061968)
Bei Anlage der SQLite-DB kann man auch den Zeichensatz angeben.
Bei mir geht Zeos auch mit Umlauten und ohne sonstige Konvertierung.

Du kannst der DB bei der Anlage mitteilen, da kommen Daten in UTF8

An den Zeos-Komponenten kannst du einstellen was du willst, die DB muss darauf vorbereitet sein.

Kostas 18. Nov 2010 12:11

AW: Mit ZeosLib umlaute in SQLite3 DB schreiben
 
Zitat:

Zitat von Sir Rufo (Beitrag 1062090)
An den Zeos-Komponenten kannst du einstellen was du willst, die DB muss darauf vorbereitet sein.

Hi,

ich habe die Datenbank mit dem Tool SQLiteAdmin angelegt. Leider gibt es da keine Möglichkeit den Zeichensatz
anzugeben, auch das Toll SQLiteSpy gibt mit keine Möglichket dafür.

Ist dir bekannt, wie ich die DB mit Zeos anlegen und dabei auch den Zeichesatz einstellen kann?
Ich arbeite sonst micht mit Zeos. Das ist das einzige Programm da die DB auf ein PDA läuft.

Gruß Kostas

Miggi 14. Apr 2011 10:18

AW: Mit ZeosLib umlaute in SQLite3 DB schreiben
 
Der Befehl ist mit verschiedenen Komponenten / Wrappern unterschiedlich zu implementieren.
Ich verwende die rudimentären Routinen aus "DISQLite3 Personal".. und das schöne ist..
ich brauche keine DLL und nix - ist alles implementiert..

.. hier ein Schnippsel mit kleinen Erklärungen
und die Zeile - um welche es geht ist mit einem ">>" markiert.

Delphi-Quellcode:
uses
 ..., DISQLite3Api,DISystemCompat,...   // eingebundene Units

var
  DB: sqlite3_ptr;       // Globale Variable für eine Datenbankdatei
  Stmt: sqlite3_stmt_ptr; // Globale Variable für ein vordefiniertes Statement .. brauche ich aber nicht :-)
  ....

Procedure CreateDatabases;
var MySetupStatement : String;
    MyDataStatement : String;
begin
  MySetupStatement:='CREATE TABLE IF NOT EXISTS Setup ('
                   + 'idno BIGINT,'
                   +' clearonnewrecord BOOLEAN,'
                   +' lastfilename CHARACTER(60))';

  MyDataStatement:='CREATE TABLE IF NOT EXISTS Data ('
                   +' idno BIGINT,'
                   +' name CHARACTER(80) PRIMARY KEY,'
                   +' farbe CHARACTER(20),'
                   +' modus INTEGER,'
                   +' gruppe BOOLEAN,'
                   +' hersteller CHARACTER(60),'
                   +' jahr CHARACTER(4),'
                   +' synonyms CHARACTER(100),'
                   +' deu BLOB,'
                   +' eng BLOB,'
                   +' fra BLOB,'
                   +' ita BLOB,'
                   +' spa BLOB,'
                   +' pol BLOB,'
                   +' ung BLOB,'
                   +' hol BLOB,'
                   +' chn BLOB,'
                   +' rus BLOB )';



  sqlite3_initialize;                                              // SQLite3 Routinen initialisieren und Speicher anfordern
  sqlite3_check(sqlite3_open('SRS4.db3', @DB));                    // Datenbank Öffnen und Handle der Variable DB zuweisen
  sqlite3_exec_fast(DB, 'PRAGMA locking_mode=EXCLUSIVE');          // Schreibschutz aktivieren
  sqlite3_exec_fast(DB, 'PRAGMA cache_size=4000');                 // Kleiner Lese/Schreibpuffer erzeugen
  sqlite3_exec_fast(DB, 'PRAGMA synchronous=OFF');                 // Erhöht Schreibzugriff aber erniedrigt Sicherheit
>>sqlite3_exec_fast(DB, 'PRAGMA encoding = "UTF-8"');              // Erzeugt DB mit UTF-8 Zeichensatz Unterstützung
  sqlite3_exec_fast(DB, MySetupStatement);                        // Datenbank SETUP erzeugen
  sqlite3_exec_fast(DB, MyDATAStatement);                         // Datenbank DATA erzeugen
  sqlite3_exec_fast(DB, 'CREATE INDEX data_idno ON data (idno)');  // index in der Tabelle "data" erzeugen
  sqlite3_exec_fast(DB, 'INSERT INTO setup (idno,clearonnewrecord,' // Setup Daten eintragen
                        +'lastfilename)'
                        +'VALUES (0,0,"SRS4.db3")');  
  sqlite3_check(sqlite3_close(DB), DB);                            // Datenbank schließen und ggf Fehler emitteln
  sqlite3_shutdown;                                                // Speicher freigeben
end;
Hinweis1: Die Function sqlite3_check() wandelt eine durch die Routine als Zahl zurückgegebenen Fehlercode in Klartext um
was "seeeehr" angenehm ist

Hinweis2: Wenn eine Datenbank mit einem Zeichensatz erstellt wird (in meinem Beispiel mit UTF-8 Codierung), so ist eine
spätere Änderung in einen anderen Zeichensat (z.B. UTF-16) nicht mehr möglich.

Kostas 14. Apr 2011 13:46

AW: Mit ZeosLib umlaute in SQLite3 DB schreiben
 
Danke für die Info.
Ich habe mein Projekt mittlerweile anders gelöst.
Für weitere Projekte ist die Info sicherlich sehr hilfreich.

Gruß Kostas

Miggi 14. Apr 2011 14:34

AW: Mit ZeosLib umlaute in SQLite3 DB schreiben
 
@Kostas

Klar kein Problem.. habe es auch für "weitersuchende" eingetragen..
es geht mir als genauso.. heutzutage gibt es nur noch wenige sinnvoll gepflegte Newsgroups und Foren....

Gruß Michael
:wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr.

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