![]() |
Delphi-Version: 5
Mehrere Datensätze von mehreren Tabellen löschen
Hallo,
liebe Com ich habe mal wieder ein Problem: ich sitze immer noch an meiner DB (IBExpert) und meiner Delphi Oberfläche. ich habe überall gesucht, ohne überhaupt das stichwort zu kennen nachdem ich suchen sollte. ich habe ein pmMenu , dass Löschen soll... mir fehlt nur noch der richtige SQL befehl.. DELETE FROM TABELLE WHERE BEDINGUNG geht leider nicht, weil ich PK und FK's habe. Dort steht dann ich lösche nen PK auf den sich ein FK bezieht und desshalb gehts nicht. wie lösche ich also nun den datensatz und die datensätze in den anderen tabellen die mit dem einen zusammenhängen? hoffe es ist halbwegs verständlich. Liebe Grüße, |
AW: Mehrere Datensätze von mehreren Tabellen löschen
Entweder in der richtigen Reihenfolge löschen (erst abhängige Datensätze, dann den Hauptdatensatz) oder eine entsprechende Löschregel festlegen (ON DELETE SET NULL/CASCADE).
|
AW: Mehrere Datensätze von mehreren Tabellen löschen
Wie immer danke für deine schnelle Antwort :),
wie würde das mit der reihenfolge als BSP aussehen? weil hintereinander wäre mir zu unsicher.... wenn da was schiefgeht dann habe ich den salat. |
AW: Mehrere Datensätze von mehreren Tabellen löschen
Wie die richtige Reihenfolge aussieht, kannst nur Du wissen. Dafür muss man die Struktur der DB kennen. Meiner Meinung ist es aber besser, das in der Datenbank zu definieren (wie DeddyH schon sagte, ON DELETE CASCADE).
|
AW: Mehrere Datensätze von mehreren Tabellen löschen
ok danke euch :)
|
AW: Mehrere Datensätze von mehreren Tabellen löschen
Nehmen wir mal eine 1:n-Beziehung, in der Du den Hauptsatz(1) löschen möchtest.
Code:
Nun soll aus der Haupttabelle der Satz mit ID 42 gelöscht werden.
Haupttabelle:
ID Name Detailtabelle: ID ID_Haupt --FK auf Haupttabelle Name Wuppdi
SQL-Code:
Das Ganze in einer Transaktion, dann sollte das auch klappen. Alternativ kannst Du natürlich auch eine SP dafür schreiben oder eben die schon erwähnte Löschregel definieren.
DELETE FROM Detailtabelle WHERE ID_Haupt = 42
DELETE FROM Haupttabelle WHERE ID = 42 [edit] *Oops* zu spät, Sch**ß Telefon :oops: [/edit] |
AW: Mehrere Datensätze von mehreren Tabellen löschen
ok danke :)
|
AW: Mehrere Datensätze von mehreren Tabellen löschen
Code:
meintet ihr das so?
delKuQuery.SQL.Text :=' DELETE FROM Sendungsverfolgung WHERE Sendungsverfolgung_ID = '''+(Inttostr(AKunde.ID))+ ''';';
delKuQuery.SQL.Text :=' DELETE FROM Kunden WHERE Kunden_ID = '''+(Inttostr(AKunde.ID))+ ''';'; es funktioniert nicht... kriege eine fehlermeldung. Obwohl ich Sendungsverfolgung_ID lösche steht da, das es nicht geht weil beim Kunden immer noch ein FK zu kunden besteht. so vielleicht? WHERE Sendungsverfolgung_ID = Kunden.Kunden_ID ??? SO sieht es insgesammt aus im Code:
Code:
procedure TDataconnect.deleteKunde(AKunde: TKunde);
var delKuQuery: TIBOQuery; delKuTransa: TIBOTransaction; begin delKuQuery:= TIBOQuery.Create(nil); delKuQuery.IB_Connection:=FDataBase; delKuTransa:= TIBOTransaction.Create(nil); delKuTransa.IB_Connection:= FDataBase; delKuQuery.SQL.Text :=' DELETE FROM Sendungsverfolgung WHERE Sendungsverfolgung_ID = '''+(Inttostr(AKunde.ID))+ ''';'; delKuQuery.SQL.Text :=' DELETE FROM Kunden WHERE Kunden_ID = '''+(Inttostr(AKunde.ID))+ ''';'; delKuQuery.ExecSQL(); delKuTransa.Commit; //TRY FINALY EINBAUEN delKuQuery.Free; delKuTransa.Free; end; |
AW: Mehrere Datensätze von mehreren Tabellen löschen
Code:
wird wirklich die KundenID zur Sendungsverfolgung verwendet??
Sendungsverfolgung_ID = '''+(Inttostr(AKunde.ID))
|
AW: Mehrere Datensätze von mehreren Tabellen löschen
ja, die Kunden ID ist der PK für die Sendungsverfolgung_ID.
damit 1 Kunde auch mehrere Bestellungen haben kann, aber gleichzeitig nix durcheinander kommt PS: Die Kunden_ID ist in der Tabelle Kunden |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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