Die Community zu .NET und Classic VB.
Menü

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

 von 

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.

Ihre Meinung  

Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.