Hi zusammen
In meinem Testprogrämmchen hab ich in den letzten Tagen endlich mal auch das getestet, wofür es gedacht war: SQLite und das erstellen einer einfachen Datenbank:
Delphi-Quellcode:
procedure TDMLSQLite.CreateAndConnectDB(Sender: TObject);
var SQLSring:
String;
begin
try
DMLSQLite.FDSQLiteConnection.Connected := false;
DMLSQLite.FDSQLiteConnection.Params.Values['
Database']:='
F:\SQLiteDatabases\'+ '
DVZO.db';
DMLSQLite.FDSQLiteConnection.Params.Values['
FailIfMissing']:='
False';
DMLSQLite.FDSQLiteConnection.Connected := true;
SQLSring:='
CREATE TABLE Bildtabelle (BildID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, Bildname VARCHAR(50), Bitmap BLOB, NEF BLOB);';
DMLSQLite.FDSQLiteConnection.ExecSQL(SQLSring);
except
on E: EDatabaseError
do
ShowMessage('
Exception raised with message' + E.
Message);
end;
end;
Das obige Codeeschnipsel richtet sich nach Beiträgem aus diesem Forum und tut genau das, was es soll. Mit einer passenden Extension versehen (*.sqlite statt *.db) konnte ich sie auch in einer Freeware-SQLite-
DB aus dem Netz öffnen. Soweit so gut. Aber nun stellte sich mir die Frage, meine
MySQL-Bilderdatenbank auf SQLite umzubauen - also hab ich noch was in Google gesucht. Und fand da prompt ein offenbar in Python geschriebenes Plug-In für
MySQL Workbench.
Damit konnte ich das
MySQL-Script der
DB nach SQLite portieren.Ein Schnipsel aus dem resultierenden SQLite-Script:
Delphi-Quellcode:
PRAGMA foreign_keys = ON
-- Schema: ContentMasterData
ATTACH "ContentMasterData.sdb" AS "ContentMasterData";
BEGIN;
CREATE TABLE "ContentMasterData"."bildtabelle"(
"idBild" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL CHECK("idBild">=0),
"Thumbnail" BLOB,"Bitmap" BLOB,
"Jpeg" BLOB,
"FolderId" VARCHAR(32));
CREATE TABLE "ContentMasterData"."galerietabelle"(
"Gallery_ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL CHECK("Gallery_ID">=0),
"GalleryName" VARCHAR(50));
CREATE TABLE "ContentMasterData"."CSS-Tabelle"(
"idCSS" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL CHECK("idCSS">=0),
"PageCSS" LONGTEXT NOT NULL,"MenueCSS" LONGTEXT NOT NULL);
Grundsätzlich auch das kein grosses Problem - ich denke, ich packe die einzelnen Createtable-Konstrukte in jeweils eine Funktion und packe sie dann folgendermassen in meine
DB-Createprozedur:
Delphi-Quellcode:
SQLSring:= Funktion1;
SQLSring:= Funktion2;
Eine offene Fage bleibt aber doch: wie gehe ich in Delphi mit den ersten Zeilen um? Wobei Zeile 1 offenbar ein Kommentar ist und somit wegfällt:
Delphi-Quellcode:
PRAGMA foreign_keys = ON
-- Schema: ContentMasterData
ATTACH "ContentMasterData.sdb" AS "ContentMasterData";
BEGIN;
Das BEGIN in derletzten Zeile stammt von
MySQL Workbench; am Schluss des Dokuments steht ein Commit, das ich als das Gegenstück zu BEGIN interptiere, also eigentlich einem end; in Delphi entspricht. Beide können also einfach weg.
Was aber mache ich mit ATTACH und "PRAGMA foreign_keys = ON"? Das "ON" war übrigens original ein "OFF" und wurde von mir geändert.
ATTACH dient offenbar zu Abfragen mehrere
DB's, und deshalb denke ich, kann es ebenfalls weg.
Gruss
Delbor