![]() |
AW: FOREIGN KEY ausgeben?
Hab alles laut Doku gemacht, aber irgendwie funktioniert das Cascaden nicht. :gruebel:
|
AW: FOREIGN KEY ausgeben?
Dann zeig doch mal die Code Stelle aus deiner Anwendung wo du das Einschaltest.
Oder sollen wir vorbeikommen und deinen Kühlschrank leerfuttern? |
AW: FOREIGN KEY ausgeben?
[OT]
Zitat:
|
AW: FOREIGN KEY ausgeben?
Liste der Anhänge anzeigen (Anzahl: 1)
Wie gesagt ich aktiviere den FK, siehe Bild, aber die Leser mit ausgeliehenen Büchern werden trotzdem Gelöscht.
Delphi-Quellcode:
FOREIGN KEY(fk_leser_id) REFERENCES leser(id) ON DELETE CASCADE);
|
AW: FOREIGN KEY ausgeben?
Darum sagte ich ja auch
![]() Und Augen auf, wenn es da heißt Zitat:
|
AW: FOREIGN KEY ausgeben?
Hier
Delphi-Quellcode:
procedure TForm1.DBErstellenMMClick(Sender: TObject);
var dbFile: String; db: TSQLiteDatabase; sSQL, sSQL1: String; begin dbFile := ExtractFilePath(Application.ExeName) + 'Database.db'; db := TSQLiteDatabase.Create(dbFile); try // Tabelle leser wird, sofern sie existiert, gelöscht if db.TableExists('leser') then begin sSQL1 := 'DROP TABLE leser'; db.execSQL(sSQL1); end; // Tabelle buch wird, sofern sie existiert, gelöscht if db.TableExists('buch') then begin sSQL := 'DROP TABLE buch'; db.execSQL(sSQL); end; // Enable foreign key constraints db.execSQL('PRAGMA foreign_keys = ON;'); <---- HIER // Tabelle leser wird angelegt sSQL1 := 'CREATE TABLE leser ..... usw; // Tabelle buch wird angelegt sSQL := 'CREATE TABLE buecher ([id] INTEGER PRIMARY KEY NOT NULL, [titel] VARCHAR (255) NOT NULL,'; sSQL := sSQL + '[fk_leser_id] INTEGER, FOREIGN KEY(fk_leser_id) REFERENCES leser(id) ON DELETE RESTRICTED);'; // Create Befehl wird ausgeführt db.execSQL(sSQL1); db.execSQL(sSQL); // Transaktion beginnt db.BeginTransaction; // leser Tabelle füllen sSQL1 := 'INSERT INTO leser ... usw.; // buch Tabelle füllen sSQL := 'INSERT INTO buch ... usw.; // Insert Befehl wird ausgeführt db.ExecSQL(sSQL1); db.ExecSQL(sSQL); // Transaktion endet db.Commit; finally db.Free; end; ShowData(); end; |
AW: FOREIGN KEY ausgeben?
Laut Doku muss das aber auch "RESTRICT" und nicht "RESTRICTED" lauten.
|
AW: FOREIGN KEY ausgeben?
Zitat:
|
AW: FOREIGN KEY ausgeben?
Es hat geklappt :dancer:
Lösung: man muss den FK immer wieder aktivieren, in diesem Fall in der DELETE Funktion. |
AW: FOREIGN KEY ausgeben?
Obwohl ich ja eher statt Restrict Cascade nehmen würde, denn Restrict verhindert eigentlich das löschen und Cascade verbreitet das löschen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 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