Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Mehrere Datensätze von mehreren Tabellen löschen (https://www.delphipraxis.net/164980-mehrere-datensaetze-von-mehreren-tabellen-loeschen.html)

Impulz 8. Dez 2011 13:50

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,

DeddyH 8. Dez 2011 13:51

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).

Impulz 8. Dez 2011 14:10

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.

Nersgatt 8. Dez 2011 14:16

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).

Impulz 8. Dez 2011 14:22

AW: Mehrere Datensätze von mehreren Tabellen löschen
 
ok danke euch :)

DeddyH 8. Dez 2011 14:24

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:
Haupttabelle:
ID
Name

Detailtabelle:
ID
ID_Haupt --FK auf Haupttabelle
Name
Wuppdi
Nun soll aus der Haupttabelle der Satz mit ID 42 gelöscht werden.
SQL-Code:
DELETE FROM Detailtabelle WHERE ID_Haupt = 42
DELETE FROM Haupttabelle WHERE ID = 42
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.

[edit] *Oops* zu spät, Sch**ß Telefon :oops: [/edit]

Impulz 8. Dez 2011 14:35

AW: Mehrere Datensätze von mehreren Tabellen löschen
 
ok danke :)

Impulz 9. Dez 2011 05:56

AW: Mehrere Datensätze von mehreren Tabellen löschen
 
Code:
delKuQuery.SQL.Text :=' DELETE FROM Sendungsverfolgung WHERE Sendungsverfolgung_ID = '''+(Inttostr(AKunde.ID))+ ''';';
delKuQuery.SQL.Text :=' DELETE FROM Kunden WHERE Kunden_ID = '''+(Inttostr(AKunde.ID))+ ''';';
meintet ihr das so?

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;

Bummi 9. Dez 2011 06:31

AW: Mehrere Datensätze von mehreren Tabellen löschen
 
Code:
Sendungsverfolgung_ID = '''+(Inttostr(AKunde.ID))
wird wirklich die KundenID zur Sendungsverfolgung verwendet??

Impulz 9. Dez 2011 06:55

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 03:06 Uhr.
Seite 1 von 4  1 23     Letzte »    

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