Einzelnen Beitrag anzeigen

Miggi

Registriert seit: 8. Jun 2004
Ort: Seelbach
7 Beiträge
 
Delphi XE Professional
 
#8

AW: Mit ZeosLib umlaute in SQLite3 DB schreiben

  Alt 14. Apr 2011, 10:18
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.
Michael
HUMMEL - gut - schnell - preiswert
  Mit Zitat antworten Zitat