Herkennen van "verwante" records met een tijdscriterium

Status
Niet open voor verdere reacties.

RadboudAKF

Gebruiker
Lid geworden
3 nov 2010
Berichten
219
Goedemorgen,

Mijn vraag is misschien wat uitgebreid. Ik heb pas éénmaal eerder een vraag gesteld en weet niet of het wel 'usance' is om een zo uitgebreide vraag te stellen. Ik ga het toch proberen...

Ik heb met Access redelijk wat ervaring maar loop nu toch tegen een probleem op dat ik niet weet op te lossen. Meestal heb ik wel een 'sparring partner' in de buurt maar die is wegens langdurige ziekte uitgevallen. Ik heb dus behoefte aan feedback.

Ik werk op een Apotheek (RadboudApotheek) en ben bezig om onze bereidingen (geneesmiddelen) in kaart te brengen. Het gaat hier m.n. om eigen 'geneesmiddel-bereidingen' die moeten worden herkend.

Ik heb een tabel (Bereidingen) (velden o.a. “medicatienummer”, “medicatienaam”, “kostenplaats”, ‘aantal”, “patientnummer”, “bereidingsdatum”, “bereidingstijd”). Deze tabel moet gaan dienen als basis voor een fakturatiemodule.

Voorts heb ik een tabel (laten we hem Ingrediënten noemen (Samenstelling van “wat zit er in de medicatie aan werkbare stoffen” (“medicatienummer”, “artikelnummer” , “aantal”)

Relatie tussen tabel 1. Bereidingen en tabel 2. is één op veel.

Wat ik zou willen en niet weet hoe ik dat voor elkaar krijg is:

Als in tabel 1.Bereidingen de velden “medicatienaam”, “kostenplaats”, “patientnummer”, “bereidingsdatum” dubbele records opleveren (dus deze de samenstelling van deze velden komt vaker voor, dat wil zeggen: er is op die datum al eerder voor dezelfde patient op dezelfde afdeling hetzelfde geneesmiddel gemaakt) dan wil ik kijken naar de

1.Bereidingstijd. Als de bereidingstijd tussen deze (dubble) records niet groter is dan vier uur dan wil ik
a. deze aantal optellen. (dus 3 dezelfde bereidingen ,binnen 4 uur, voor dezelfde patient op dezelfde afdeling= 3x1 stuks
b. in de VEEL-tabel (met ingredienten) de ingredienten bij elkaar optellen
c. Een nieuw nummer uitdelen en daarbij het oude medicatienummer nog kunnen herleiden.

Ik kan mij voorstellen dat dit een tamelijk lastige vraag. Wat heb ik tot nu gedaan?

Met query "Dubbele records" kan ik de records wel herkennen, maar weet niet hoe om te gaan met criterium "4 uur tussen de bereidingstijden". Bovendien begrijp ik niet hoe ik in de samenstellingen dan kan optellen.

Ik hoop dat iemand reageert dan zou ik misschien een voorbeeld kunnen opsturen?.

Met vr.gr.

Jan - Apotheker
 
Je bent al een heel eind, want bij het lezen kwam uiteraard als eerste de tip op om de <wizard Dubbele records> te gebruiken om de dubbele rijen te filteren. Je geeft niet aan hoe je de tijden opslaat; normaal gesproken doe je dat via een Datum/Tijd veld, en als dat zo is, kun je de waarden wel van elkaar aftrekken door een berekend veld te maken dat de tijd van het voorlaatste record uitleest, zodat je ze van elkaar af kunt trekken. Dan kun je daar weer verder op door filteren (<4 uur).
Vervolgens kun je in een nieuwe query, de waarden weer optellen door van die query een Totalen query te maken.
De laatste stap is dan een Toevoegquery te maken die een nieuw record maakt op basis van de eerder berekende gegevens.
 
Michel,

Dank voor je reactie.

De tijden staan in de tabel in een TEKSTVELD. Er staat bv. 13:21 Dat gegeven krijg ik op die manier uit een dataexport van het systeem dat we hier hanteren. Ik lees dat in, in een TEKSTVELD dus. De datum krijg ik apart aangeleverd. Dus als ik het goed begrijp dan zal ik de velden BEREIDINGSDATUM en BEREIDINGSTIJD moeten samenvoegen in er mee te kunnen optellen en aftrekken? Het veld BEREIDINGSDATUM kan dan niet meer in mijn query DUBBELE RECORDS worden meegenomen.

Ik weet niet precies hoe dit te doen...maar zal er eens mee gaan stoeien. Heb ik (als ik de velden heb weten om te vormen tot een datum/tijd veld) dan de functie DATEDIFF nodig?

Jan
 
BereidingsDatum en BereidingsTijd zou ik juist niet samenvoegen, want de een heb je nodig als criterium in de Running Sum formule, en de ander als rekenelement. Overigens moet die dan wel worden omgezet naar een getal, anders kun je natuurlijk niet rekenen.
Als je een voorbeeldje kan maken, kunnen we wel meestoeien :)
 
Michel,

Ik heb een zip file meegestuurd met de ACCDB-toepassing.

Je ziet twee tabellen (één op veel relatie) (tabellen krijg ik via een data-export aangeboden uit een NIEUW systeem dat we volgende maand in gebruik gaan nemen. We moeten echter zelf fakturen blijven maken.

CATO_VTGM_1 (hoofdgegevens)
CATO_VTGM_2 (ingredienten)

Het gaat er mij om dat ik alle 'zelfde' bereidingen 'herken' (kostenpl, patientiD, naam, Datum) dan naar criterium "4uur" kijk en daar de aantallen optel. Bovendien moet dat geheel dan ook weer zijn terug te herleiden naar de "Veel"-tabel om de ingredienten op te halen en op te tellen.
Wat ik ook niet begrijp is hoe ik dan toch nog het oorspronkelijke MEDicatie-nummer weet te herkennen.

Misschien is dit heel simpel, maar ik kom er niet goed uit. (terwijl ik tevoren dacht, klusje van niks). Wellicht zou je met jouw kennis eens een klein balletje kunnen opgooien over de mogelijkheden?

Jan
 

Bijlagen

Ik kan er vanavond pas naar kijken i.v.m. de access versie. Met een mdb-tje kan ik zo nog wel een blik werpen.
 
Michel,

Hierbij ook een .mdb . Ben al heel erg blij iemand gevonden te hebben die met me wil 'sparren' . Hier op mijn werk raken de "ACCESS-mensen" een beetje 'op' .
 

Bijlagen

Michel,

In de bijlage (de .MDB) mis ik nu wel allerlei (dubbele records)queries die ik had gemaakt. Als je van een .accdb een .mdb maakt dan neemt íe dat kennelijk niet mee...
 
Als je de SQL van die queries kan posten, ben ik er ook.
 
Michel,

Ik zag dat deze 'probeerqueries' (dubbele records) er toch staan....(in de .mdb) ik probeerde daar bv. een tabel te maken die alleen de "dubbele record" opslaat in een (nieuwe) tabel. Maar hoe ik vandaar dan weer verder moet met het herkennen van de oorspronkelijke medicatienummers (de sleutel in tabel 2) en de betreffende ingredienten dan moet optellen....bovendien wist ik niet hoe ik dat 4uurs criterium moest gebruiken.

Wellicht wat veel, maar ben benieuwd naar je gedachten daarover.
 
In de versie die ik net open, staan geen queries. En op basis van de veldnamen kan ik ook niet zien waar de één-op-veel relatie moet liggen tussen de tabellen.
 
Laatst bewerkt:
Access 2003 doet niet aan 'Alle access objecten' Hoeft ook niet, want je ziet alles al :) (Hoe ontwikkel je een nieuw pakket? Maak een nieuw scherm waardoor je niks meer kunt vinden, en voeg dan een optie toe: "Alle objecten". Allicht dat iemand denkt: da's handig!)
 
Ik heb het de vorige tijd en het verschil kunnen berekenen in een query (01 DubbeleRecords). Lijkt mij dat je nu wel weer verder kunt?
 

Bijlagen

Ik ga hier naar kijken. Ik hoop dat ik begrijp wat hier gebeurt....wellicht kom ik nog eens bij je terug. In ieder geval heel hartelijk bedankt for the time being...
 
Ik begrijp hier niet veel van....moet ik eerlijk zeggen.

Maar ik ga proberen te doorgronden wat deze functie die je hebt gebouwd nu precies doet en hoe die mij kan helpen. Ik zie een functie die naar (vorige) tijd kijkt (onafhankelijk of het product hetzelfde is), en (tijds)verschillen maar het vorige record, maar ik begrijp niet hoe ik nu toch de dubbele records (zelfde product, zelfde productiedatum, zelfde kostenplaats, zelfde patient) binnen 4 uur zou moeten herkennen en de aantallen zou moeten optellen.

Toch zeer bedankt voor je tijd en inspanning. Ik ga proberen dit te snappen...
 
Ik heb het voorbeeldje relatief simpel gemaakt, met alleen een check op Datum en tijd, dat klopt. Het idee daarbij is, dat je op basis daarvan zelf een uitgebreidere check kunt maken :)
Je moet dus ook een vergelijking toevoegen die op basis van product, kostenplaatst etc. Maar het principe daarvan is hetzelfde. Het komt hier op neer: bij het zoeken naar het voorlaatste record gebruik je een TOP 1 selectiequery die er nu zo uit ziet:
Code:
Vorige_EindTijd: (SELECT TOP 1 [VTGM_Bereidingstijd] FROM CATO_VTGM_1 AS T1 WHERE T1.VTGM_Bereidingsdatum = CATO_VTGM_1.VTGM_Bereidingsdatum AND T1.[VTGM_Bereidingstijd] <CATO_VTGM_1.[VTGM_Bereidingstijd] ORDER BY T1.VTGM_Bereidingsdatum DESC, [VTGM_Bereidingstijd] DESC)
ALs je een tabel met zichzelf gaat vergelijken (en dat doe je) gebruik je twee instanties van die tabel. De kopietabel geef je dan een Alias naam. In dit geval heet die kopie T1. In die kopie zitten uiteraard dezelfde velden. De vergelijking maak je in het WHERE stuk. Nu dus bestaande uit twee elementen:
WHERE T1.VTGM_Bereidingsdatum = CATO_VTGM_1.VTGM_Bereidingsdatum
AND T1.[VTGM_Bereidingstijd] <CATO_VTGM_1.[VTGM_Bereidingstijd]

Daar kun je uiteraard elementen aan toevoegen, zoals je produkt en je patientID.
Allemaal volgens de constructie: AND T1.[Veldnmaam]=CATO_VTGM_1.[Veldnaam]
 
Mijn kennis van Access is kennelijk niet dusdanig groot dat ik meteen zeg: "oh ja, natuurlijk, ik begrijp dat".

Maar als ik het probeer te begrijpen: ik zal op basis van jouw functie elementen (bv. product) moeten toevoegen aan de query om de "tijdsvergelijking" binnen de ge-groepeerde records te kunnen uitvoeren.

Ik ga hiermee aan de slag....ik denk dat je me een flink eind op weg hebt geholpen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan