Ga naar inhoud
  • 0

verplicht verwijderen records kindtabel


sveens

Vraag

Geplaatst:

Hoi,

 

Ik heb twee tabellen, een ouder en een kindtabel. Deze twee tabellen zijn dus met elkaar gerelateerd. Wat ik wil is dat de gebruiker verplicht is alle kindtabel records dient te verwijderen alvorens hij de oudertabelrecord kan verwijderen. Dit om te voorkomen dat er "wezen" records achterblijven in de kind tabel. We hebben het hier dus over referentiele integriteit. Hoe krijg ik dit voor elkaar want het wil me niet lukken.

 

Moet dat met een script?

 

 

gr,

 

Stef van der Veen

6 antwoorden op deze vraag

Aanbevolen berichten

  • 0
Geplaatst:
Dat kan je eenvoudig aanvinken in je "relation graph".

Als je de "moeder" verwijderd, worden automatisch "alle kinderen" verwijderd.

 

Rony,

 

Ik druk me verkeerd uit. Wat jij zegt wil ik dus niet. Ik ben op de hoogte van het aanvinken in de 'relation graph' maar ik krijg het daar niet voor elkaar wat ik wil.

 

Om te voorkomen dat de 'domme' gebruiker de verkeerde moeder delete en daarmee alle samenhangende records definitief verwijdert in alle andere tabellen wil ik gewoon de gebruiker verplichten eerst alle kindrecords te verwijderen voordat hij de moeder verwijdert.

 

Ik wil het in dit forum ook niet steeds hebben over Access want ik wil verder met Filemaker maar in Access kan je dus referentiele integriteit afdwingen en daarbinnen kan je ook nog kiezen of de gerelateerde records in die tabellen geupdate dienen te worden en/of verwijder moeten

worden.

 

Om even de mogelijkheden van Access te laten zien:

 

Voorbeeld bij een relation graph in Access:

 

Enforce Referential Integrity (aangevinkt)

 

Cascade Update Related Fields (niet aangevinkt)

 

relationship is ONE-TO-MANY

 

Cascade Deleted Related Records (niet aangevinkt)

 

Dit zorgt ervoor dat de gebruiker geen moeder records kan weggooien zonder eerst de kind records weg te gooien. Je zal maar diverse gerelateerde tabellen hebben waarbij per ongeluk door het verwijderen van een moeder record alle kindrecords verwijderd wordt uit alle gerelateerde tabellen.

  • 0
Geplaatst:

Ik heb bij ieder record een auto-enter waarde met een relatie die opgaat indien er een parentkey aan verbonden is.

 

Door het verwijderen te scripten wordt er eerst gekeken of deze relatie in aantal records niet > 1 is.

 

Is het wel groter dan 1, geen verwijderen mogelijk, want dan is er nog een gerelateerd record.

 

Maar heel mijn toepassing is van het begin al opgebouwd rond ref. integriteit. En dat heb je wel nodig.

Het achteraf 'bijmaken' heeft niet veel zin. En het verwijderen dient via script, dus de gebruiker uit de menu mogelijkheden bonjouren....

  • 0
Geplaatst:
Ik heb bij ieder record een auto-enter waarde met een relatie die opgaat indien er een parentkey aan verbonden is.

 

DE eertse zin begrijp ik even niet. De rest wel :D:wink:

 

gr,

 

Stef van der Veen

  • 0
Geplaatst:

Ik bouw altijd mijn toepassing rond de referential integrity. Ik heb een aantal standard velden die dat voor elkaar krijgen, zoals een keybuilder etc.

 

Basis is dat er nooit een record in de child table mag zijn die een niet bestaande referentie heeft naar de parent table. Dat kun je hebben door een niet bestaande waarde in een foreign key.

Met een keybuilder field kun je de foreign key waarde gaan valideren t.o.v. geindexeerde waardelijsten van primary keys in de parent table.

Het is voldoende die waarde te capteren met een valuelist op de primary key. Je valuelist werkt op de achtergrond.

De validatie van de foreign key verloopt dan via die valuelist, die strict moet zijn (anders is er een overtreding van de normalisatieregls).

 

Of je nu al of niet een null waarde toelaat hangt af hoe je de onderliggende waarde van de tables gaat beschouwen die betrokken worden in de relatie.

 

Om kort te gaan: je kunt een Cascade delete hebben (Rony gaf al aan hoe je dit kunt doen), of je kunt een restricted delete doen.

Dit kan simple met een script, nadat je de integrity hebt opgezet.

 

Wordt dan iets zoals :

 

If [Get (WindowMode ) = 1]
Show Custom Dialog [”Find Mode” ; “You are currently in Find mode and cannot delete records in this mode.”]
Exit script
End If
Go to Layout [ “Name Table” (nameLayout) ]
Allow User Abort [Off]
If [isValid (nameRel::ID )
Show Custom Dialog [”Cannot Delete” ; “This record has related record(s) and cannot be deleted.”]
Else
Show Custom Dialog [”Delete Record” ; “Are you sure you want to permanently delete this ENTIRE record?.”]
Etc
Etc
End If
End If

 

Bij meer complexe toepassingen kun je gebruik maken van de affiliatie techniek die auto-enter verschillende waardes gaat plaatsen, waarna de keybuilder die bij elkaar brengt (met PatternCount etc.) naargelang de noodzaak. Die techniek wordt dikwijls in BOM systemen gebruikt waar je meer dan 25 levels diep gaat in de relaties. Daardoor kun je bekomen dat het verwijderen van records in een bepaalde volgorde dient te gebeuren.

 

Maar we wijken af....

 

HTH

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...