Teller telt niet meer door

Status
Niet open voor verdere reacties.

kruimeltjes

Gebruiker
Lid geworden
30 sep 2009
Berichten
222
Beste Allemaal,

Ik heb mbv vba in Access een database "gemaakt" voor de opslag van onze patientengegevens. Nu moest ik laatst een studie toevoegen aan de database en hierdoor ook in vba het een en ander erbij voegen.

Naar mijn weten heb ik niks veranderd aan mijn teller maar op de een of andere manier telt deze niet meer door.

Ik heb zelf gezocht en gezocht maar kan niet vinden waar dit in zit. Zou iemand mij kunnen helpen door er naar te kunnen kijken en mij te vertellen waar nu de fout zit.

Mijn dank is groot.

Groetjes,

Simone
Bekijk bijlage Patientendatabase.part01.rar
Bekijk bijlage Patientendatabase.part02.rar
 
Op welk formulier?
 
Eigenlijk op allebei de formulieren (materiaal en patiënt) maar het meest duidelijkst is het in de tabel patiënt. Teller Blijft hangen oP 0092.

Ik heb de studie cftr toegevoegd trouwens.
 
Ik vermoed dat je probleem wordt veroorzaakt doordat je de nieuwe waarde niet hebt toegevoegd, wat je had moeten doen, maar er tussenin hebt gezet. De nummering klopt nu niet meer, en daarom worden de nummers niet meer goed aangemaakt. Ik heb de nieuwe waarde in een oudere db toegevoegd met de waarde 15, en het werkt prima. In jouw variant doet-ie het inderdaad niet, maar daar heeft de nieuwe optie de waarde 5, en die had je uiteraard al. Als je nieuwe waarden toevoegt, zorg er dan voor dat ze de oorspronkelijke waarden niet veranderen.
 
En inderdaad zo simpel kan het dus zijn, dank je wel hij telt door alleen geeft die als laatst gevonden waarde aan 0073 ipv 0091. Enig idee hoe dit kan?
 
Hij zoekt nu op het laatste record, niet op de hoogste code. Eigenlijk zou je dus eerst moeten filteren op de hoogste gekozen code, en daar het nummer uit halen. Dan kun je ook geen verkeerde nummers aanmaken.
 
Ik denk dat ik het heb;

Code:
SELECT TOP 1 Last(Tbl_Materials.PatientID) AS LaatsteVanPatientID
FROM Tbl_Materials;

ipv

selecteren uit de tabel patient
 
Zou zo maar kunnen ;) Neemt niet weg dat je een tekstveld hebt om te zoeken, dus ik kan me voorstellen dat je per code een nummering wilt kunnen maken. En dan heb je een extra filter nodig.
 
Je hebt nu (als ik het mij goed herinner) gaten in de nummering per code, omdat je alleen naar het laatste record kijkt. Door te kijken naar de laatste waarde uit de groepen, maak je de nummering wat fraaier. Dus dat zou ik doen.

Krijg je zoiets:

Code:
    ' Mbv de query qLaatstePatientID wordt uit de tabel patient het laatst gebruikte ID opgehaald
    If Len(StudyName) > 2 Then
        strCode = Left(StudyName, 3)
    Else
        strCode = "@" & StudyName
    End If

    strSQL = "SELECT DISTINCT TOP 1 Tbl_Patient.PatientID FROM Tbl_Patient " _
    & "WHERE (Left([PatientID], 3) = '" & strCode & "')"
    
    intCode = 0
    i = 1

'De qLaatstePatientID wordt geopend
    With CurrentDb.OpenRecordset(strSQL)
' Als de laatst geonden record gelijk is aan 1 en niet gelijk is aan 0 dan wordt deze waarde
' geplaatst in de variable strLaatsteCode
        If .RecordCount > 0 Then
            strLaatsteCode = Nz(.Fields(0).Value)
             ' Dit wordt net zolang gedaan tot er een getal is gevonden (i)
            Do While Not IsNumeric(Mid(strLaatsteCode, i, 1))
              i = i + 1
            Loop
              intCode = Mid(strLaatsteCode, i, Len(strLaatsteCode))
        End If
    End With
 
En zou je die dan als vervangen doen voor;

Code:
   Case 16
      Me.StudyName = "CFTR"
End Select

'' Mbv de query qLaatstePatientID wordt uit de tabel patient het laatst gebruikte ID opgehaald
    strSQL = "SELECT TOP 1 Last(Tbl_Materials.PatientID) AS LaatsteVanPatientID FROM Tbl_Materials;"
    intCode = 0
    i = 1
     
'De qLaatstePatientID wordt geopend
    With CurrentDb.OpenRecordset(strSQL)
' Als de laatst geonden record gelijk is aan 1 en niet gelijk is aan 0 dan wordt deze waarde
' geplaatst in de variable strLaatsteCode
        If .RecordCount = 1 And Not Nz(.Fields(0), "") = "" Then
            strLaatsteCode = Nz(.Fields(0).Value)
 ' Dit wordt net zolang gedaan tot er een getal is gevonden (i)
            Do While Not IsNumeric(Mid(strLaatsteCode, i, 1))
                i = i + 1
            Loop
            intCode = Mid(strLaatsteCode, i, Len(strLaatsteCode))
        End If
    End With
    
'de variable intCode (cijfercode) wordt met 1 verhoogd om een nieuw volgnummer te creeren
    intCode = intCode + 1

' als de lengte van de studiennaam groter is dan 2 dan worden de eerste 3 letters van de naam samen met de cijfercode gebruikt
    If Len(StudyName) > 2 Then
        strCode = Left(StudyName, 3) & Right("0000" & intCode, 4)
'als de lengte van de studienaam kleiner is dan 2 dan wordt er voor de studienaam een @ geplaatst gevolgd door de cijfercode
    Else
        strCode = "@" & StudyName & Right("0000" & intCode, 4)
    End If
'het PatientID bestaat uit de 1ste 3 letters van de studienaam en een cijfercombinatie
    Me.PatientID = strCode
 
Ik heb het voorbeeldje maar even voor je gezipt...
 

Bijlagen

Laatst bewerkt:
Ik heb eens kort naar je database gekeken. Deze is voor een aantal verbeteringen vatbaar.
De nummering voor het PatientID o.a. kan anders
Code:
Me!PatientID=Right$("@@@" & Trim(Left$(Me!StudyName & Space$(3), 3)), 3) & Right$("0000" & CStr(Val(Nz(DMax("right$(PatientID,4)", "tbl_Patient"), "0")) + 1), 4)
 
@ OctaFish; werkt inderdaad goed maar als ik bv invoer dat iemand aan de studie Anakinra mee doet dan gaat die inderdaad dan pakt die nummer 0002 wat op zich goed is en eigenlijk veel mooier ook is maar als nr 0002 al in vergeven aan een patient dan pakt die het nummer toch. Hij zoekt dus niet het laatste nummer op van die studie.

En dat moet absoluut niet gebeuren.

Nu heb ik het volgende ervan gemaakt;

Code:
strSQL = "SELECT DISTINCT TOP 1 [B][U]Last[/U][/B](Tbl_Patient.PatientID) FROM Tbl_Patient " _
    & "WHERE (Left([PatientID], 3) = '" & strCode & "')"

En het ziet er naar uit dat dit werkt maar vroeg me af of ik het ook inderdaad zo kon doen?

@Harry46; dank je wel voor je suggestie ga het uitproberen!

Groetjes,

Simone
 
Last helpt niks; waarschijnlijk heb je de db gebruikt voordat ik de nieuwe versie heb gepost. Er ontbrak namelijk een regeltje. De zip is dus de goede versie, de rar was de verkeerde.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan