Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQl Delete - löschen über mehrere Tabellen (https://www.delphipraxis.net/152190-sql-delete-loeschen-ueber-mehrere-tabellen.html)

alex-91 14. Jun 2010 16:17

Datenbank: BDE • Version: Paradox 7 oder so ... • Zugriff über: k.a

SQl Delete - löschen über mehrere Tabellen
 
Hallo ich bins wieder :)

Also folgendes:
Ich hab eine Haupttabelle mit Inventarnummern und eine Detailtabelle mit diversen Informationen( nicht relevant) die mit eben dieser Haupttabelle über ein fremdschlüsselfeld verbunden ist.

Nun soll der User die Inventarnummer in ein Edit eingeben und anahnd dieser Nummer soll der entsprechende datensatz mit den dazugehörigen details aus der Detailtabelle gelöscht werden.

Hab eine SQL Abfrage mit DELETE FROM
Delphi-Quellcode:
 
nummer:=Edit1.Text;
 Query1.Active:=false;
 Query1.SQL.Clear;
 Query1.SQL.Add('DELETE FROM Inventarnummern, Details WHERE Inventarnummer = "'+(nummer)+'" AND Details.ID = Inventarnummern.ID_Details');
 Query1.ExecSQL;
leider kommt dann eine fehlermeldung mit " ... invalid use of keyword token: , "
wenn ich das delete nur in der Tabelle Inventarnummern mache funktionierts, kann es sein dass das generell nur bei einer tabelle möglich ist ? kennt ihr andere lösungswege ?

lg alex-91

mkinzler 14. Jun 2010 16:19

AW: SQl Delete - löschen über mehrere Tabellen
 
Geht so nicht. Eine Möglichkeit wäre eine Delete-Rule. Das wird aber bei Paradox nicht funktionieren.

hoika 14. Jun 2010 16:27

AW: SQl Delete - löschen über mehrere Tabellen
 
Hallo,

unter Paradox musst du zuerst in der Detail-Tabelle löschen und dann in der Master,
wären also 2 SQL-Befehle.

Standard-Frage: Warum Pdx ?
Unter Firebird würde man einen Foreign Keys mit Cascade-Delete definieren ...


Heiko

alex-91 14. Jun 2010 16:34

AW: SQl Delete - löschen über mehrere Tabellen
 
Zitat:

Zitat von hoika (Beitrag 1028805)
Hallo,

unter Paradox musst du zuerst in der Detail-Tabelle löschen und dann in der Master,
wären also 2 SQL-Befehle.

Standard-Frage: Warum Pdx ?
Unter Firebird würde man einen Foreign Keys mit Cascade-Delete definieren ...


Heiko

Foreign Keys ? cascade-delete ?
verwende Pdx weil ich in der schule nichts anderes gelernt habe, sind kein sonderlich umfangreicher informatik-zweig :) zum was anderes lernen/anschaun ist leider auch nicht wirklich zeit

das heißt also ich wähl den datensatz anhand der eingegebenen nummer aus, nehm das feld mit dem fremdschlüsselfeld, komm dadurch zum entsprechenden detail-datensatz, lösch diesen und dann den rest aus der haupttabelle ?

lg

mkinzler 14. Jun 2010 18:08

AW: SQl Delete - löschen über mehrere Tabellen
 
Cascade Delete ist eine Delete Rule. Bei moderneren DBMS kann man angeben, was passiert wenn man einem Datensatz den Bezug wegnimmt.

Ein kaskadierendes Löschen bedeutet, dass abhängige Datensätze mitgelöscht werden ( gefährlich Regel). Andere Alternativen wären z.B. ein Standradbezug herzustellen.

Beispiel: Beim Löschen eines Kunden werden alle seine Rechnungen gelöscht in Folge auch alle Rechnungspositionen der Rechnungen.

FK steht für Foreign Key also Fremdschlüssel

DeddyH 14. Jun 2010 18:22

AW: SQl Delete - löschen über mehrere Tabellen
 
Weiterführende Literatur dazu


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz