AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Automatiach erstellte Syntax
Thema durchsuchen
Ansicht
Themen-Optionen

Automatiach erstellte Syntax

Ein Thema von Delbor · begonnen am 5. Sep 2017 · letzter Beitrag vom 9. Sep 2017
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Automatiach erstellte Syntax

  Alt 9. Sep 2017, 12:14
Hi TigerLilly

Vielen Dank für den Tip!
Zitat:
Tipp: Mach dir ein kleines Testprogramm und scha, ob du das connecten und anlegen einer Tabelle hinbekommst, bevor du weiter machst.
Zurzeit arbeite ich an einem Testprogramm - nur dass ich da auch schon andere Dinge ausgetestet habe, wie zum Bleistift das Erstellen einer Hilfe.

Zitat:
// alle Anweisungen für SQLite müssen mit ExecSQL ausgeführt werden
FDSQLiteConnection.SQLExec('PRAGMA foreign keys=on');
FDSQLiteConnection.SQLExec('create table ....');
Ich habe zur Zeit folgendes Konstrukt:
Delphi-Quellcode:
  try
    FDSQLiteConnection.Connected := true;
    FDSQLiteConnection.ExecSQL('ATTACH "M:\SQLite-DB Corner\ContentMasterData\ContentMasterData.sqlite" AS ContentMasterData');
    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
Das wiederholte Öffnen und Schliessen der Verbindung gefällt mir dabei gar nicht, und so habe ich die Zeile mit der ATTACH-Anweisung nach unten verlegt (in die jetzige Leerzeile), was zu einem Fehler führte. Welcher das war, kann ich zur Zeit nicht mehr nachvollziehen, da das schon einige Stunden her ist.


Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor ( 9. Sep 2017 um 12:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.242 Beiträge
 
Delphi 12 Athens
 
#2

AW: Automatiach erstellte Syntax

  Alt 9. Sep 2017, 12:28
Testprogramme müssen so klein sein + so wenig Aufwand bedeuten, dass man sie leichten Herzens löscht/verändert etc. Sonst klebt man immer am gleichen Code + lernt nichts dazu. Immer nur eine Sache auf einmal ausprobieren.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 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-2025 by Thomas Breitkreuz