Bij het verwijderen is het belangrijk dat je de te verwijderen records ook daadwerkelijk mág verwijderen. Je mag doorgaans bijvoorbeeld géén patiënt verwijderen uit je Klantentabel als er nog behandelingen van die patiënt in de tabel Behandelingen staan. Dan zou je behandelingen in je tabel hebben waar geen patiënt aan hangt. Moet je niet willen doorgaans
. Er zijn twee mogelijke werkwijzen:
1. Verwijder de gegevens van de persoon uit
alle betrokken tabellen handmatig
2. Geef in de Relaties aan dat gerelateerde records moeten worden verwijderd.
De tweede werkwijze is het makkelijkst, en doorgaans ook het consequents, want je kunt niet vergeten om onderliggende tabellen te verwijderen. De eerste werkwijze (die jij dus zo te zien toepast) werkt in beginsel óók prima, maar vereist dat je de records in de juiste volgorde verwijdert. En dat betekent: van onderen naar boven. Dus eerst de records in BehandelDagen en Factuurregels, dan de records in Behandelingen en Facturen, en dan pas in Patiënten. En heb je nog meer niveau's, dan moet je uiteraard nog lager beginnen. Nou kan ik me voorstellen dat het vanuit juridisch/belastingtechnisch oogpunt niet is toegestaan om facturen etc. te verwijderen, omdat je daarmee je bedrijfsadministratie overhoop haalt. Haal je inkomsten weg uit de db, dan verander je natuurlijk wel het e.e.a.
Maar gesteld dat je alles netjes hebt gearchiveerd, dan zou dat dus op deze manier moeten kunnen.
Wat ik bij jou constateer, is dat je de records allemaal tegelijk afvuurt. En daar zou wel eens een probleem door kunnen komen. Als je iets in een hoger gelegen tabel probeert te verwijderen, terwijl de onderliggende tabel nog data bevat, ja, dan krijg je dus een probleem. Al is je plaatje niet bepaald verhelderend, want ik zie niet bij welke tabel het nu fout gaat.
Ik zou dus ofwel het opschonen onder verschillende knoppen hangen (met een check voordat je de volgende query uitvoert of alles wel is verwijderd) ofwel die check inbouwen in je huidige routine. Daarnaast zou ik de volgorde veranderen, als ik het datamodel van een oudere db nog mag geloven (Data staat daar niet in gekoppeld).
Code:
With CurrentDB
.Execute "DELETE * FROM VERZEK WHERE KODE = """ & Me.Kode & """", dbFailOnError
.Execute "DELETE * FROM VOORSCHR WHERE KODE = """ & Me.Kode & """", dbFailOnError
.Execute "DELETE * FROM DATA WHERE KODE = """ & Me.Kode & """", dbFailOnError
.Execute "DELETE * FROM FICHE WHERE KODE = """ & Me.Kode & """", dbFailOnError
End With
Maar als je in de relatie FICHE --> VOORSCHR de optie <Gerelateerde records trapsgewijs verwijderen> aan zet, en tussen VOORSCHR --> VERZEK óók (alleen de eerste werkt natuurlijk niet, omdat je dan met VERZEK records blijft zitten), dan hoef je alleen de records in FICHE te verwijderen, om daarmee tegelijkertijd dus óók VOORSCH en VERZEK op te schonen.