| 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. |