Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Foreign key references are present for the record (https://www.delphipraxis.net/118308-foreign-key-references-present-record.html)

DevStar 5. Aug 2008 00:57

Datenbank: Firebird • Version: 2.1 • Zugriff über: Delphi, IBX

Foreign key references are present for the record
 
Beim Löschen der Client-Tabelle zu meiner Master-Tabelle, bekomme ich folgende Fehlermeldung:

SQL-Code:
Foreign key references are present for the record
Was will Firebird mir damit sagen?
Hat jemand eine Idee, wie sich das umgehen läßt?

Kennt jemand überhaubt diesen Fehler? Habe vergebends gegoogelt.

LG DevStar

Hansa 5. Aug 2008 01:05

Re: Foreign key references are present for the record
 
Das ON CASCADE ist falsch eingestellt, oder der DS ist noch active.

DevStar 5. Aug 2008 01:26

Re: Foreign key references are present for the record
 
Zitat:

Zitat von Hansa
Das ON CASCADE ist falsch eingestellt, oder der DS ist noch active.

Das stimmt
SQL-Code:
on delete CASCADE
, denn da tritt der Fehler auf.
Stelle ich auf SET NULL oder DEFAULT um, dann wir der Datensatz in meinem View ignoriert, dan ist er weg und wird nicht mehr angezeigt.

In der Client-Tabelle sind Bezeichnungen hinterlegt, da ist ja Quatsch, wenn diese gelöscht werden, das dann der Datensatz in der Mastertabelle keine Bezeichnung hat.

Also ist CASCADE richtig. Nur müsste ich den Fehler abfangen.

Delphi-Quellcode:
ShowMessage ('Eintrag kann nicht gelöscht werden, da er in Tabelle 1 verwendet wird.');
Der Witz ist nur, bei CASCADE ist mein Datensatz in der MAster-Tabelle komplett weg.

Oder denke ich ganz falsch mit meiner Datenbank?

Hansa 5. Aug 2008 01:59

Re: Foreign key references are present for the record
 
Zitat:

Zitat von DevStar
Zitat:

Zitat von Hansa
Das ON CASCADE ist falsch eingestellt, oder der DS ist noch active.

Also ist CASCADE richtig. Nur müsste ich den Fehler abfangen.

Der Witz ist nur, bei CASCADE ist mein Datensatz in der MAster-Tabelle komplett weg.

Oder denke ich ganz falsch mit meiner Datenbank?

Halb zumindest. Wieso ist das CASCADE denn richtig ? Das läuft so : Master-DS wird gelöscht und dann werden alle untergeortneten DS auch gelöscht, also die Details. Ich würde das mal im IBExpert ausprobieren. Deshalb auch der zweite Hinweis. Was sagt uns denn das "is present" ? Das übersetze ich jetzt aber nicht.

mkinzler 5. Aug 2008 06:55

Re: Foreign key references are present for the record
 
CASCADE bedeutet, dass beim Löschen des Mastersatzen (z.B. Rechnung) alle Detailsätze ( z.B. Rechnungspositionen) automatisch mitgelöscht werden. Ist imho aber eine gefährliche Option.

dfried 5. Aug 2008 07:53

Re: Foreign key references are present for the record
 
Zitat:

Zitat von mkinzler
CASCADE.... Ist imho aber eine gefährliche Option.

Naja, wenn man weiss was man tut kanns auch sehr nützlich sein.

DeddyH 5. Aug 2008 07:57

Re: Foreign key references are present for the record
 
Zitat:

Zitat von dfried
Naja, wenn man weiss was man tut kanns auch sehr nützlich sein.

Aber nur dann :mrgreen:.

Hansa 5. Aug 2008 09:52

Re: Foreign key references are present for the record
 
Er hat das hier gefragt :

Zitat:

Zitat von DevStar
Beim Löschen der Client-Tabelle zu meiner Master-Tabelle, bekomme ich folgende Fehlermeldung: ...

Das ist also das Gegenteil von ON DELETE CASCADE. Und das habe ich nur in den Raum geworfen, weil es irgendwie schon passt. Aber eben leider nicht so richtig für den konkreten Fall.

Trotzdem noch hierzu :

Zitat:

Zitat von mkinzler
CASCADE bedeutet...Ist imho aber eine gefährliche Option.

Was wäre wenn der Rechnungskopf gelöscht wird, ohne ALLE Detaildaten zu löschen ? Tja, die bleiben dann als Datensatzleichen in der DB und müssen irgendwie, irgendwann (irgendwo :lol: ) von Hand gelöscht werden. Da die Daten ja hoffentlich nicht öffentlich zumindest über IDs zugänglich sind, wird das aus dem Programm raus echt schwierig. Man könnte halt einen Punkt einführen : "alle verwaisten Detail-Datensätze ohne Master - ID löschen". Und dann ? Man hätte sich tatsächlich die Wörter ON DELETE CASCADE gespart. Leichen im Keller sind immer schlecht. :mrgreen:

mkinzler 5. Aug 2008 09:56

Re: Foreign key references are present for the record
 
Es gibt auch andere Möglichkeiten: Manuelles Löschen im Code oder Umlenken auf Dummy-Rechnung o.ä. Ich habe auch nicht gesagt das diese Option schlecht ist; man sollte sie halt wohlüberlegt einsetzen. Das Beispiel mit der Rechnung war ja auch ein Pro Beispiel; ein Contra-Fall wäre die Beziehung von Rechnungspositionen zu Artikeln.

Hansa 5. Aug 2008 10:18

Re: Foreign key references are present for the record
 
Zitat:

Zitat von mkinzler
...oder Umlenken auf Dummy-Rechnung o.ä...Das Beispiel mit der Rechnung war ja auch ein Pro Beispiel; ein Contra-Fall wäre die Beziehung von Rechnungspositionen zu Artikeln.

Na gut, das Umlenken lasse ich mir ja noch gefallen. Nur, das Contra-Beispiel ist genauso kontraproduktiv. :mrgreen: Was nützt es mir denn, einen Artikel zwar zu löschen, aber nicht die Rechnungspositionen, auf denen der vorkommt ? Dann hätte man Rechnungspositionen ohne Artikelnr., von denen keiner mehr weiß, was der Kram soll. Nene, wenn schon löschen, dann aber richtig. Eben ohne Leichen in der DB zurückzulassen, die mühsam einzeln entsorgt werden müssen. *grusel*


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 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