Start / FAQ / FAQ 0010: Was bedeutet "Nicht genügend Schlüsselinformationen"?
 
Startseite Up-/Download Tutorials Club Das Team
Rubriken Foren Bücher Tips 'n Tricks Suche


FAQ 0010: Was bedeutet "Nicht genügend Schlüsselinformationen"?


  Frage

Wenn ich einen Datensatz löschen möchte, wird mir der Fehler "Nicht genügend Schlüsselfeldinformationen" gemeldet. Wie kann ich den Datensatz trotzdem löschen?

  Antwort

Dieser Fehler tritt meist bei Abfragen auf, deren Quell-Tabellen verknüpft sind:

SELECT tblMaster.Feld1, tblSlave.Feld1 
FROM tblMaster INNER JOIN tblSlave ON tblMaster.ID = tblSlave.MasterID;

Listing 1: Einfaches Inner Join

Soll jetzt aus dieser Abfrage ein Datensatz gelöscht oder geändert werden, muß die Datenbank zwei Tabellen ändern (tblMaster und tblSlave).
Nun ist es aber meistens so, daß ein Datensatz aus tblSlave auf mehrere Datensätze in tblMaster paßt. Wenn die Datenbank einen Datensatz aus tblSlave löschen soll, würden mehrere Datensätze in tblMaster ohne verknüpfte Daten dastehen. Aus diesem Grund verweigert die Datenbank das Löschen des Datensatzes.
Gleiches passiert beim Ändern von Datensätzen: Um die Datenbank fehlerfrei zu halten, wird die Änderung abgelehnt.

Wenn trotzdem gelöscht oder geändert werden soll, muß man sich mit einem Trick abhelfen:
Man liest die ID des Masters mit aus. Mit dieser ID kann man eine separate Anweisung starten, die den Datensatz löscht oder ändert.

SELECT tblMaster.ID AS MasterID, tblMaster.Feld1, 
       tblSlave.ID AS SlaveID, tblSlave.Feld1 
FROM tblMaster INNER JOIN tblSlave ON tblMaster.ID = tblSlave.MasterID;

Listing 2: Erweitertes Inner Join

Die weitere Anweisung lautet dann:

DELETE * FROM tblMaster WHERE tblMasterID = MasterID;

Listing 3: Einen Datensatz löschen

Wobei MasterID aus der Auswahlabfrage auszulesen ist.
Das Löschen des Datensatzes mit der SlaveID empfiehlt sich erst, wenn sichergestellt ist, daß kein anderer Datensatz aus der tblMaster diesen Datensatz noch referenziert.


Erstellt: 29.04.2003
Aktualisierung: 26.07.2010
  Autor: Helge Rex
E-Mail: faq@ActiveVB.de



Copyright © 1998-2010 by ActiveVB
Alle Rechte vorbehalten.