Ik heb er naar gekeken, en ik snap eerlijk gezegd de opzet van je tabel Factuur niet helemaal. Daar zitten volgens mij overtollige velden in (Maand, Jaar waarbij Jaar ook nog eens een tekstveld is en geen getal) en vooral het veld [Kind] dat volslagen overbodig is, omdat je al het veld KindID hebt. Op basis daarvan moet je altijd de juiste Kind gegevens kunnen opzoeken in de tabel [Kind]. Dat verandert volgens mij ook de strekking van je oorspronkelijke vraag:
In deze tabel zitten er personen (persoonsID), die slechts 1 keer in de tabel voorkomen, maar sommige personen (persoonsID) komen meerdere keren voor in de tabel, met compleet verschillende gegevens.
Tenzij ik het verkeerd begrijp (want ik snap je vraag eigenlijk nog steeds niet) en dat je het hebt over dubbele boekingen etc. in de tabel factuur. Want die zijn er inderdaad ook. Op zichzelf is het vreemd dat het überhaupt kan; pakken we er een voorbeeldje bij: 27-11-2015 en KindID 404. Die is, volgens je tabel, die dag 2 keer langsgekomen. Want je hebt daar 2 registraties voor gemaakt.
Code:
Datum KindID Periode van Periode tot Beginuur Einduur
27-11-2015 404 1-10-2015 31-12-2015 06:50:00 17:10:00
27-11-2015 404 1-10-2015 31-12-2015 08:25:00 18:25:00
Die data haal je vermoedelijk uit de tabel [Opvang, waar het eigenlijke probleem zit. Want ik zie in Factuur velden die daar ook helemaal niet thuis horen (redundantie). In Opvang zie ik dan dit:
Code:
Datum Kind Beginuur Einduur duur Factuur Facturatie Dagbedrag Vastbedrag Dagtotaal
27-11-2015 404 06:50 17:10 10:20 1 1 21,5 € 0,00
27-11-2015 404 08:25 18:25 10:00 1 1 21,5 € 0,00
In essentie dezelfde uren als in Factuur (waar ze dus helemaal niet zouden mogen staan).
De vraag is enerzijds: hoe is het mogelijk dat je één kind 2 keer kan registreren op dezelfde tijd (verkeerde indexen), en anderzijds: hoe kom je er van af
.
Om de laatste vraag te beantwoorden, kun je inderdaad doen wat je zelf voorstelt: de twee data(tijd)velden samenvoegen en de laagste begintijd en de hoogste eindtijd te nemen. Of dat correcte records oplevert, zou ik eerst eens nalopen.
1. In de db die je hebt gestuurd gaat het om zo'n 93 dubbele registraties over de laatste jaren, dus dat is nog wel te controleren met de hand.
2. Als je akkoord bent en wilt opschonen, dan zou ik eerst in Opvang een Autonummerveld toevoegen (heb je nu niet) zodat je records kunt filteren op de hoogste of laagste waarde. Maakt volgens mij niet zoveel uit welke.
3. Vervolgens maak je een query die je laagste begintijd, de hoogste eindtijd en eventuele andere velden die je over wilt zetten groepeert op Datum + KindID.
4. Op het ID veld dat je hebt toegevoegd pak je dan Min of Max. Volgens mij heb je dan namelijk de gewenste unieke combinatie. Elk record in die query moet uniek zijn.
5. Van die query maak je dan een tabel (Tabelmaakquery) zodat de aan te passen records makkelijk zijn te vinden straks.
6. Die nieuwe tabel koppel je aan de tabel [Opvang]. Als het goed is, zie je alleen de records die je over wilt houden in Opvang. Deze records werk je bij met de waarden uit de tijdelijke tabel.
Je hebt nu nog steeds dubbele records, maar één record (met het Min of Max nummer) is nu compleet. Het andere record kan dus weg.
7. Maak een verwijder query waarbij je de andere set nummers verwijdert.
Zorg er vervolgens voor, als je van de dubbele records af bent, dat je de tabellenstructuur op orde brengt. Deze problemen had je nooit gehad als de indexen goed waren geweest, en verwijder gelijk ook alle data die
niet in de tabel thuishoort. In Factuur zijn dat best veel velden, namelijk: alle velden die ook al in Opvang staan. En Kind.
Overigens schijnt het in Nederland verboden te zijn om factuurnummers te genereren die
niet opvolgend oplopen. Er mogen, kortom, in factuurnummers geen gaten zitten. Dat is blijkbaar anders in België
.