Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbankeneinträge anhand der ID löschen [Relation] (https://www.delphipraxis.net/164981-datenbankeneintraege-anhand-der-id-loeschen-%5Brelation%5D.html)

Elexarie 8. Dez 2011 14:01

Datenbank: MySQL • Version: 5.5.16 • Zugriff über: PHPMyAdmin / ODBC

Datenbankeneinträge anhand der ID löschen [Relation]
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi-Praxis,

wir schreiben demnächst eine Klausur über die Thematik der Datenbanken. Das Thema allgemein ist einfach, ich bekomme alles problemlos hin.

Jetzt stehe ich allerdings vor einem Problem.

Ich habe eine Tabellenanordnung die im Anhang vorhanden ist.

Jetzt soll anhand der ID der Hilfstabelle die einzelnen Datensätze gelöscht werden, außer das Album / Interpret sind noch vorhanden.

Welche Befehle kann ich da senden?

DeddyH 8. Dez 2011 14:06

AW: Datenbankeneinträge anhand der ID löschen [Relation]
 
Hab ich jetzt nicht ganz verstanden. Was genau soll gelöscht werden?

Elexarie 8. Dez 2011 14:19

AW: Datenbankeneinträge anhand der ID löschen [Relation]
 
Hallo Detlef,

ich habe mir schon gedacht, dass es schwer sein könnte, zu verstehen.

Also. Ich habe eine ListView.
Darin stehen:
ID (H_Musik.ID), Interpret (Interpret.Interpret), Titel (Titel.Titel) und Album (Album.Album).

So. Der ausgeführte Befehl zur Beschaffung der Daten schaut wie folgt aus:

Delphi-Quellcode:
ADOQuery1.SQL.Text := 'SELECT H_Musik.id, Interpret, Titel, Album from H_Musik, Interpreten, Titel, Album where F_Interpret = Interpreten.ID and F_Titel = Titel.ID and F_Album = Album.ID';
Jetzt stehen halt die gesagten Daten in der Liste. Anhand der PrimärID der H_Musik will ich jetzt den Datensatz entfernen. Ich will aber berücksichtigen, dass es ja sein kann, dass ich häufiger "Shakira" haben kann. Wenn in der H_Musik also die ID von "Shakira" steht und es noch eine weitere gibt, soll sie zumindest nicht aus der Liste der Interpreten entfernt werden.

Ist schwer zu beschreiben.

Verstanden, sonst versuch ich es nochmal.

DeddyH 8. Dez 2011 14:35

AW: Datenbankeneinträge anhand der ID löschen [Relation]
 
Also soll der Hauptsatz aus der Beziehungstabelle gelöscht werden und ggf. die Detailsätze, wenn keine weiteren Abhängigkeiten bestehen, stimmt das so?

Elexarie 8. Dez 2011 14:45

AW: Datenbankeneinträge anhand der ID löschen [Relation]
 
Genau!

DeddyH 8. Dez 2011 14:49

AW: Datenbankeneinträge anhand der ID löschen [Relation]
 
Aus dem Hut und ungetestet:
SQL-Code:
DELETE FROM h_musik WHERE ID = 100;
DELETE FROM interpreten I WHERE NOT EXISTS
  (SELECT * FROM h_musik WHERE F_interpret = I.ID);
DELETE FROM titel T WHERE NOT EXISTS
  (SELECT * FROM h_musik WHERE F_Titel = T.ID);
DELETE FROM album A WHERE NOT EXISTS
  (SELECT * FROM h_musik WHERE F_Album = A.ID);
Das Ganze könnte man z.B. in eine SP auslagern, die die ID (hier 100) als Parameter entgegennimmt.

Elexarie 8. Dez 2011 14:53

AW: Datenbankeneinträge anhand der ID löschen [Relation]
 
Kann man das alles in einen ADOQuery1.SQL.Text packen?

DeddyH 8. Dez 2011 14:54

AW: Datenbankeneinträge anhand der ID löschen [Relation]
 
ADO ist nicht meine Welt, aber ich glaube, das geht nicht, da die Query nur einen Befehl ausführt. Ich bin da aber nicht sicher. Evtl. geht es mit ADOCommand?

Elexarie 8. Dez 2011 15:20

AW: Datenbankeneinträge anhand der ID löschen [Relation]
 
Wenn ich die Befehle in einer ADOQuery nacheinander Abfrage, muss ich ja unten anfangen, denke ich mal.


Und wie kann ich beim Erstellen die Existenz überprüfen und WENN JA -> die ID von dem einsetzen.

Das heißt: Ich habe "Peter" in meiner Interpreten Liste und füge Peter hinzu. Wie kann ich die ID von Peter übernehmen?

jobo 8. Dez 2011 15:25

AW: Datenbankeneinträge anhand der ID löschen [Relation]
 
Den wenigsten Ärger hast Du, wenn Du dafür (Insert/Update/Delete) 3 Stored Procs anfertigst, wo Du alle diese Zusammenhänge berücksichtigst.
Die rufst Du einfach auf und wenn es ein Problem geben sollte, wird es automatisch zurückgerollt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr.
Seite 1 von 2  1 2      

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