AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Foreign key references are present for the record
Thema durchsuchen
Ansicht
Themen-Optionen

Foreign key references are present for the record

Offene Frage von "DevStar"
Ein Thema von DevStar · begonnen am 5. Aug 2008 · letzter Beitrag vom 6. Aug 2008
Antwort Antwort
Seite 2 von 2     12   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Foreign key references are present for the record

  Alt 5. Aug 2008, 11:19
Dann veränderst du alte Rechnungen!!! Deshalb sollte man in diesem Fall keine Löschregel verwenden!
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12

Re: Foreign key references are present for the record

  Alt 5. Aug 2008, 11:39
Ne Markus, da lasse ich nicht mit mir reden. Wenn gelöscht werden muss, dann richtig und basta. Rechnungen sind als Beispiel sowieso etwas ungeeignet, weil es nur noch eine Frage der Zeit ist, bis einer sagt, die dürften gar nicht gelöscht werden wegen Finanzamt. 8) Um dem zuvorzukommen : was, wenn ich einen Artikel löschen will, der seit über 10 Jahren nicht mehr verkauft wird ? Dann muss aber wirklich alles aus der DB verschwinden, was irgendwie mit dem zu tun hat. Jo, basta.
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Foreign key references are present for the record

  Alt 5. Aug 2008, 12:01
Also dann sind wir in diesem Punkt halt anderer Ansicht
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: Foreign key references are present for the record

  Alt 5. Aug 2008, 12:04
Hallo,

Zitat von DevStar:
Beim Löschen der Client-Tabelle zu meiner Master-Tabelle, bekomme ich folgende Fehlermeldung: Foreign key references are present for the record ...
die Client-Tabelle wird sicher einen Fremdschlüssel auf die Master-Tabelle halten und solange dieses Constraint existiert kann die Tabelle nicht entfernt werden. Also zuerst alle Constraints entfernen und dann DROP TABLE.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#15

Re: Foreign key references are present for the record

  Alt 5. Aug 2008, 14:50
Hallo Hansa,

Zitat:
Ne Markus, da lasse ich nicht mit mir reden. Wenn gelöscht werden muss, dann richtig und basta
Da bin ich ganz Deiner Meinung!

Zitat:
: was, wenn ich einen Artikel löschen will, der seit über 10 Jahren nicht mehr verkauft wird ?
Garnichts löschen! Das sind ganz reale Daten, die in der Vergangenheit eine Berechtigung hatten! Gelöscht werden dürfen nur Daten die keine Berechtigung haben und keinen Bezug zu anderen, realen Daten (sollte bei Spieldaten allerdings nicht vorkommen!) z.B. Spiel oder Test-Daten, davon gibt es in den meisten Datenbanken genug. Aber alles was einen konkreten Hintergrund hat, muß in einer DB vorhanden bleiben!

Es sei denn Deine DB wird nur benutzt um irgendwo anders vorhandene Daten neu zu organisieren, dann wäre das nach meinem Verständnis aber keine "Datenbank" sondern eine "Datensammelstelle".

Gruß
K-H
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Foreign key references are present for the record

  Alt 5. Aug 2008, 14:54
Zitat:
Garnichts löschen! Das sind ganz reale Daten, die in der Vergangenheit eine Berechtigung hatten! Gelöscht werden dürfen nur Daten die keine Berechtigung haben
Und deshalb ist für mein Beispiel eine kaskadierende Löschregel fehl am Platze
Markus Kinzler
  Mit Zitat antworten Zitat
DevStar

Registriert seit: 26. Aug 2007
79 Beiträge
 
#17

Re: Foreign key references are present for the record

  Alt 6. Aug 2008, 00:36
Zitat von marabu:
Hallo,

Zitat von DevStar:
Beim Löschen der Client-Tabelle zu meiner Master-Tabelle, bekomme ich folgende Fehlermeldung: Foreign key references are present for the record ...
die Client-Tabelle wird sicher einen Fremdschlüssel auf die Master-Tabelle halten und solange dieses Constraint existiert kann die Tabelle nicht entfernt werden. Also zuerst alle Constraints entfernen und dann DROP TABLE.

Grüße vom marabu
Habe es jetzt so gelöst, dass ich die Exception abfange und eine Meldung ausgebe, das dieser Daznsatz nicht gelöscht werden kann, da er noch verwendet wird.

Danka an alle.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#18

Re: Foreign key references are present for the record

  Alt 6. Aug 2008, 08:32
Moin,

Zitat von DevStar:
Habe es jetzt so gelöst, dass ich die Exception abfange und eine Meldung ausgebe, das dieser Daznsatz nicht gelöscht werden kann, da er noch verwendet wird.
DROP TABLE war wohl ein Missverständnis.

Zitat von DevStar:
Beim Löschen der Client-Tabelle zu meiner Master-Tabelle, bekomme ich folgende Fehlermeldung ...
Sorry, aber darunter habe ich als native speaker DROP TABLE und nicht DELETE FROM TABLE WHERE verstanden. In deinem Fall geht es ja wohl nur um einzelne Datensätze.

Wenn deine anderen Formulierungen nicht auch irreführend sind, dann hast du einen Fehler in deinen DRI Constraints, vermutlich hast du Master und Detail verwechselt. Das Abfangen des Fehlers bei gescheitertem DELETE vergleiche ich mit dem Kauf eines Eimers bei einem Leck in der Wasserleitung - wenn du verstehst, was ich meine.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#19

Re: Foreign key references are present for the record

  Alt 6. Aug 2008, 09:08
Nochmal zum Allgemeinverständnis anhand eines Beispiels. Angenommen, wir haben eine Stammdatentabelle mit Augenfarben und eine Detailtabelle mit Personen. In der Personentabelle ist die Augenfarbe als Fremdschlüssel auf die Augenfarbentabelle referenziert.
Code:
Augenfarben:

ID |  Bezeichnung
1      blau
2      braun
3      grün


Personen:

ID |  Name |  Augenfarbe
1      Meier   1
2      Müller  2
3      Schulze 3
Was soll nun mit den Personen geschehen, wenn z.B. die Augenfarbe blau gelöscht wird?

1. Gar nichts, Löschen bei existierenden Referenzen nicht möglich (Standard)
2. Die Referenz wird genullt (ON DELETE SET NULL)
3. Der Detaildatensatz wird ebenfalls gelöscht (ON DELETE CASCADE)

Daten nach Löschen:

Fall 1: siehe oben, Fehlermeldung
Fall 2:
Code:
Augenfarben:

ID |  Bezeichnung
2      braun
3      grün


Personen:

ID |  Name |  Augenfarbe
1      Meier   NULL
2      Müller  2
3      Schulze 3
Fall 3:
Code:
Augenfarben:

ID |  Bezeichnung
2      braun
3      grün


Personen:

ID |  Name |  Augenfarbe
2      Müller  2
3      Schulze 3
Man muss sich also bereits bei der Planung der DB Gedanken darüber machen, welchen dieser 3 Fälle man anstrebt. Wie bereits in diesem Thread angedeutet macht es dabei schon einen Unterschied, ob es sich um Spielstände (nicht für die Ewigkeit gedacht) oder Rechnungen (Daten müssen zwecks Prüfung erhalten bleiben) handelt.

Sollte ich das jetzt falsch dargestellt haben, bitte ich um sofortige Korrektur.

[edit] Nachtrag: Wenn man kaskadiert, muss man das allerdings auch durchgängig tun. Sollte es also weitere Tabellen geben, die sich auf Personen beziehen, muss die Personentabelle auch kaskadierend definiert sein, sonst ist das Löschen ebenfalls nicht möglich. Das zieht sich solange durch, bis es keine Referenzen mehr gibt. Hier liegt auch die große Gefahr dabei: möglicherweise löscht man so Daten, an die man gar nicht gedacht hatte. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 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