Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#46

AW: Automatiach erstellte Syntax

  Alt 9. Sep 2017, 13:45
Das kann so nicht funktionieren:
Delphi-Quellcode:
 try
    //Datenbankverbindung herstellen, mit welchen Optionen?
    FDSQLiteConnection.Connected := true;
    // Datenbank sagen, dass sie eine weitere Datenbankdatei nutzen soll.
    FDSQLiteConnection.ExecSQL('ATTACH "M:\SQLite-DB Corner\ContentMasterData\ContentMasterData.sqlite" AS ContentMasterData');
    // Datenbankverbindung beenden. Damit ist die Info für die Nutzung einer weiteren Datebank "vergessen".
    FDSQLiteConnection.Connected := false;
    // Jetzt sagen wir erst der Datenbankverbindung, "wohin" wir möchten.
    FDSQLiteConnection.Params.Values['Database'] := 'M:\SQLite-DB Corner\ContentmasterData\ContentmasterData.sqlite'; //
    FDSQLiteConnection.Params.Values['FailIfMissing'] := 'False';
    // Das dürfte kein Parameter sein, sondern ein mit ExecSQL auszuführender Befehl,
    // da ja (laut Eingangspost) ein Teil des Scriptes und keine Verbindungsinformation.
    // Das Pragma dient nicht zur Herstellung der Datenbankverbindung, sondern ist eine
    // Verhaltensanweisung für den Umgang mit Fremdschlüsseln innerhalb der Datenbankverbindung.
    FDSQLiteConnection.Params.Values['PRAGMA foreign_keys'] := 'ON';
    // Datenbankverbindung herstellen.
    FDSQLiteConnection.Connected := true;
    Result := FDSQLiteConnection.Connected;
    // Da ja ATTACH in einer vorherigen Datenbankverbindung aufgerufen wurde und nach deren Beendigung
    // nicht mehr bekannt ist, dürfte es im weiteren Ablauf nicht verwunderlich sein, wenn die
    // dort verbundene Datenbank nicht mehr bekannt ist.
    // Hier müssten dann wohl eher die beiden folgen:
    FDSQLiteConnection.ExecSQL('ATTACH "M:\SQLite-DB Corner\ContentMasterData\ContentMasterData.sqlite" AS ContentMasterData;');
    FDSQLiteConnection.ExecSQL('PRAGMA foreign_keys = ON;');
  except
Alles was Du im Script des Eingangspostes gefunden hast, ist per ExecSQL auszuführen, je Befehl ein ExecSQL, innerhalb einer Datenbankverbindung.

Willst Du die Createstatements nicht innerhalb einer Datenbankverbindung ausführen, so musst Du nach jedem Aufbau einer neuen Datenbankverbindung ATTACH und PRAGMA neu ausführen.

Oder irre ich mich da?

Ansonsten mal hier lesen: https://www.sqlite.org/doclist.html https://www.sqlite.org/lang_attach.html https://www.sqlite.org/pragma.html
  Mit Zitat antworten Zitat