Da mir vollkommen schleierhaft ist, wo denn genau der Fehler nun passiert, mal folgenden Vorschlag einer veränderten Prozedure:
Delphi-Quellcode:
function TDMLSQLite.ExecuteSQL(ASQL :
String) : Boolean;
begin
try
FDSQLiteConnection.ExecSQL(ASQL);
Result := True;
except
on E: EDatabaseError
do begin
ShowMessage('
Fehler beim Ausführen des Statements:' + #13#13 + ASQL + #13#13 + + E.
Message);
Result := False;
end;
end;
end;
function TDMLSQLite.ConnectContentmasterDB : Boolean;
begin
try
FDSQLiteConnection.Connected := false;
FDSQLiteConnection.Params.Values['
Database'] := '
M:\SQLite-DB Corner\ContentmasterData\ContentmasterData.sqlite';
FDSQLiteConnection.Params.Values['
FailIfMissing'] := '
False';
FDSQLiteConnection.Params.Values['
PRAGMA foreign_keys'] := '
ON';
FDSQLiteConnection.Connected := true;
Result := FDSQLiteConnection.Connected;
except
on E: EDatabaseError
do begin
ShowMessage('
Fehler beim Aufbau der Datenbankverbindung: ' + #13#13 + E.
Message);
Result := False;
end;
end;
end;
procedure TDMLSQLite.ContentmasterDBCreate;
begin
if ConnectContentmasterDB
then begin
if ExecuteSQL(Createbilddescribetabelle)
then
if ExecuteSQL(Createbilddescribetabelle_has_HtmlTabell)
then
if ExecuteSQL(Createbildtabelle)
then
if ExecuteSQL(CreateCSSTabelle)
then
if ExecuteSQL(Creategalerietabelle)
then
if ExecuteSQL(CreateHTMLTable)
then
if ExecuteSQL(CreateJavascriptTable)
then
if ExecuteSQL(Createkategorien_tabelle)
then
if ExecuteSQL(Createkategorien_tabelle_has_bildDescribeTabelle)
then
if ExecuteSQL(CreateMenueTabelle)
then
if ExecuteSQL(CreateSubMenue2Table)
then
if ExecuteSQL(CreateSubmenuetabelle)
then ShowMessage('
Das war wohl nix!');
end;
end;
Damit könnte dann erkennbar werden, ob der Fehler bereits bei der Herstellung der Datenbankverbindung auftritt oder erst im späteren Verlauf.
Wenn im späteren Verlauf, wird das fehlerverursachende Statement zusammen mit der Fehlermeldung ausgegeben.
Dies könnte ggfls. die Fehlerursachenforschung deutlich vereinfachen.
Und das ist nur ein Vorschlag, den man strukturell sicherlich noch deutlich verbessern könnte.
Eine noch bleibende Fehlerursache ist, dass bei FDSQLiteConnection.Params.Values davon ausgegangen wird, dass die Paramter schon vorhanden sind. Eventuell zusätzlich vorhandenen Parameter werden nicht geprüft und könnten ggfls. zu unerwünschten Nebenwirkungen führen.
Sinnvoll (und meiner Meinung nach zwingend) ist es, die Parameterliste nach dem Beenden der Verbindung zu leeren und dann die gewünschten Parameter in die Liste einzufügen.
TigerLilly hat da ja, durchaus berechtigt, schon drauf hingewiesen.
Dann schreibst Du einerseits
ATTACH "ContentMasterData.sdb" AS "ContentMasterData";
und andererseits
DMLSQLite.FDSQLiteConnection.Params.Values['Database']:='M:\SQLite-DB Corner\ContentmasterData\ContentmasterData.sqlite';
Wo wird der Zusammenhang zwischen ContentMasterData.sdb und ContentmasterData.sqlite hergestellt?
Das ist mir nicht klar, könnte das gglfs. eine Fehlerursache sein?
Zumindest hätte ich da eher sowas erwartet:
ATTACH "ContentMasterData.sqlite" AS "ContentMasterData";
Aber da mag ich mich wohl auch irren.