AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Referentielle Integrität in Access ohne Datensatz zu löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Referentielle Integrität in Access ohne Datensatz zu löschen

Ein Thema von Overclocker · begonnen am 21. Jun 2008 · letzter Beitrag vom 21. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
Overclocker

Registriert seit: 10. Jan 2007
215 Beiträge
 
#1

Referentielle Integrität in Access ohne Datensatz zu löschen

  Alt 21. Jun 2008, 12:32
Datenbank: access • Zugriff über: sql
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Referentielle Integrität in Access ohne Datensatz zu lös

  Alt 21. Jun 2008, 12:35
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>
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Overclocker

Registriert seit: 10. Jan 2007
215 Beiträge
 
#3

Re: Referentielle Integrität in Access ohne Datensatz zu lös

  Alt 21. Jun 2008, 12:48
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
  Mit Zitat antworten Zitat
Overclocker

Registriert seit: 10. Jan 2007
215 Beiträge
 
#4

Re: Referentielle Integrität in Access ohne Datensatz zu lös

  Alt 21. Jun 2008, 14:32
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Referentielle Integrität in Access ohne Datensatz zu lös

  Alt 21. Jun 2008, 14:38
Zuerst einmal ist NULL <> 0. Und dann könntest Du eine Embedded DB (Firebird kann z.B. so betrieben werden) verwenden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
rotfc
(Gast)

n/a Beiträge
 
#6

Re: Referentielle Integrität in Access ohne Datensatz zu lös

  Alt 21. Jun 2008, 14:47
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Referentielle Integrität in Access ohne Datensatz zu lös

  Alt 21. Jun 2008, 14:49
Ein Kunde kann aber auch bei mehreren Banken Konten haben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Overclocker

Registriert seit: 10. Jan 2007
215 Beiträge
 
#8

Re: Referentielle Integrität in Access ohne Datensatz zu lös

  Alt 21. Jun 2008, 14:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Referentielle Integrität in Access ohne Datensatz zu lös

  Alt 21. Jun 2008, 15:00
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).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
rotfc
(Gast)

n/a Beiträge
 
#10

Re: Referentielle Integrität in Access ohne Datensatz zu lös

  Alt 21. Jun 2008, 15:21
Zitat von DeddyH:
Ein Kunde kann aber auch bei mehreren Banken Konten haben.
Praktisch schon, wen Du 1:n aufgeben willst und zu Gruppensex (m:n) übergehen willst

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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.
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