![]() |
Datenbank: access • Zugriff über: sql
Referentielle Integrität in Access ohne Datensatz zu löschen
Hi,
folgendes Problem: Ich habe 2 Tabellen: Tab: Kunden KundenID Name Vorname BLZ Tab: Banken BankID BLZ Bezeichnung Wenn ich jetzt diese 2 Tabellen mit referentieller Integrität in Access verknüpfe und ich lösche den Datensatz mti der BankID 1 (diese Bank ist aber wiederum ein paar Kunden zugeordnet), dann löscht der mir ja auch alle Kunden-Datensätze wo diese BankID drinnen ist. klar man könnte die löschweitergabe entfernen aber dann kann ich z.b. den Bank-Datensatz nicht löschen weil ne Meldung kommt. Besteht auch die Möglichkeit dann z. B. eine 0 oder "Nicht vorhanden" in ein Feld dann zu schreiben damit der Datensatz nicht gelöscht wird? Danke für die Hilfe |
Re: Referentielle Integrität in Access ohne Datensatz zu lös
Bei einem richtigen DBMS könntest du das per Trigger erledigen.
Bei Access würde ich erst ein Update-Statement auf die Kundentabelle loslassen
SQL-Code:
Update Kunden
set BLZ = NULL where BLZ = <zu löschende ID> |
Re: Referentielle Integrität in Access ohne Datensatz zu lös
das mit dem update ist aber auch wieder ein problem.
wenn ich die anderen datensätze zuerst update, dann kommt ja auch wieder ein fehler weil ja in der banktabelle keine ID mit 0 vorhanden ist ;) aber der ansatz war schon mal gut |
Re: Referentielle Integrität in Access ohne Datensatz zu lös
ich glaube ich werd da nicht um ein trigger rumkommen.
hab das ganze egntl nur gemacht, damit ich die datenbank schnell mal auf nen anderen pc ziehen kann um da weiterzuprogrammieren. aber muss ich wohl auf nen sql server umziehen mal ne andere frage: wenn ihr ein programm schreibt und dazu eine datenbank benötigt und das programm verkaufen wollt, welche möglichkeiten gibt es da das ganze so zu programmieren,dass ich das auf ne cd brennen kann,dann auf nen pc installieren und alles läuft ohne extra dbms oder sowas |
Re: Referentielle Integrität in Access ohne Datensatz zu lös
Zuerst einmal ist NULL <> 0. Und dann könntest Du eine Embedded DB (Firebird kann z.B. so betrieben werden) verwenden.
|
Re: Referentielle Integrität in Access ohne Datensatz zu lös
Für referentielle Integrität brauchen die beiden Tabellen ein gemeinsames Feld vom gleichen Datentyp, das nur von einer der beiden Tabellen bestückt werden darf.
Wenn 10 Kunden in der einen Tabelle die gleiche BLZ haben und man löscht die BLZ der Bank in der anderen Tabelle fliegen die 10 Kunden aus der ersten Tabelle raus. Du hast 1:n-Beziehungen im Sinne von eine 1Bank kann nviele Kunden haben. Mit ein paar Klicks in Access (Extras/Beziehungen) kannst Du die referentielle Integrität der beiden Tabellen untereinander aufheben. Dann hast Du zwei Tabellen, die nichts mehr miteinander zu tun haben. Beachte, welche Abfragen Du unter Access gespeichert hast ;-) HTH |
Re: Referentielle Integrität in Access ohne Datensatz zu lös
Ein Kunde kann aber auch bei mehreren Banken Konten haben.
|
Re: Referentielle Integrität in Access ohne Datensatz zu lös
das ist eine 1:n beziehung lol da bin ich mir sicher :)
bankid ist autowert in der einen tabelle und in der anderen ist der datentyp eine zahl also das ist schon richtig so, das ist eine 1:n beziehung da kenn ich mich schon aus. |
Re: Referentielle Integrität in Access ohne Datensatz zu lös
Ich weiß nicht, wie das in Access ist, aber bei der Definition eines Fremdschlüssels kann man doch angeben, was beim Löschen passieren soll (ON DELETE CASCADE | SET NULL).
|
Re: Referentielle Integrität in Access ohne Datensatz zu lös
Zitat:
Durch die beiden Kontonummern i.V. mit der BLZ hat der Kunde zwei "Primärschlüssel". Über eine zusätzliche Tabelle lässt sich aber das auch lösen. Wobei der Primärschlüssel dann in der neuen Tabelle ist. Nichts hasse ich mehr als Datenbanken, bei denen nachträglich (wegen falschem Lastenheft) der Primärschlüssel geändert werden muss! Da lob' ich mir Schäuble in den Fußstapfen von Schili! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz