Gegevens worden niet opgeslagen in de tabel

Status
Niet open voor verdere reacties.

kruimeltjes

Gebruiker
Lid geworden
30 sep 2009
Berichten
222
Ik heb op het forum gezocht en gezien dat deze vraag al eerderis gesteld maar in een net iets andere context. Ik heb 2 formulieren gemaakt. In het ene formulier moeten de gegevens van de patient worden ingevuld, als er dan wordt geklikt op een studynaam wordt het 2de formulier geopend.

Gedeeltelijk worden in dit formulier gegevens over genomen (patientID en StudyName), afhankelijk van de keuze van de studie worden verschillende dingen actief. Nu is het probleem dat ik hier wel gegevens in kan gaan voeren maar deze worden niet bij elkaar opgeslagen. En dan bedoel ik dus dat de patientID en studie een aparte lijn in de tabel krijgen maar de verder ingevoerde gegevens ook. En dat terwijl deze aan elkaar gekoppeld moeten zijn.

Ik benal enige tijd op zoek waar dit in kan zitten maar kom er niet achter. Heeft iemand een idee waar het hem in kan zitten?

Groetjes,

Simone

PS: helaas is het RAR bestand wat ik heb net iets te groot om toe te voegen mochtik het toch nog voor elkaar krijgen om hem nog kleiner te maken dan voeg ik hem als nog toe
 
Ik snap toch niet helemaal wat je bedoelt.... Blijkbaar heb je gegevens die in het eerste formulier worden gemaakt, op basis waarvan je een tweede formulier opent. Maar wat wil je dan opslaan, en in welke tabellen? Je wekt de indruk dat er twee keer min of meer hetzelfde record wordt aangemaakt... Of gaat het alleen om de gegevens van het tweede formulier?

Als de db net te groot is, kun je hem met WinRar simpel splitsen. Er is een draadje met uitleg beschikbaar.
 
Oke,

ik ben ondertussen weer een stapje dichter bij denk ik. Ik ben er achter gekomen dat er in mijn vba code waarschijnlijk een fout zit.

Code:
Private Sub fraStudyName_AfterUpdate()
  
  Dim strArgs As String
  Dim strLaatsteCode As String
  Dim strCode As String
  Dim strSQL As String
  Dim intCode As Integer, i As Integer

  Select Case Me.fraStudyName
    Case 1
      Me.StudyName = "Anakinra"
    Case 2
      Me.StudyName = "Cardio"
    Case 3
      Me.StudyName = "CB"
    Case 4
      Me.StudyName = "CVID"
    Case 5
      Me.StudyName = "Diabetes"
    Case 6
      Me.StudyName = "HC"
    Case 7
      Me.StudyName = "HPV"
    Case 8
      Me.StudyName = "JIA"
    Case 9
      Me.StudyName = "JDM"
    Case 10
      Me.StudyName = "MTX"
    Case 11
      Me.StudyName = "RA"
    Case 12
      Me.StudyName = "Transitie"
    Case 13
      Me.StudyName = "Vaart"
    Case 14
      Me.StudyName = "Wheezer"
  End Select

' Mbv de query qLaatstePatientID wordt uit de tabel patient het laatst gebruikte ID opgehaald
    strSQL = "SELECT TOP 1 Last(PatientID) AS PatientCode FROM Tbl_Patient;"
    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

    If Me.Dirty Then Me.Dirty = False
   
' de gegevens worden bewaard waardoor deze kunnen worden toegevoegd aan de tabel Materialen
   strSQL = "INSERT INTO Tbl_Materials( PatientID, [Study Name]) "
   strSQL = strSQL & "VALUES('" & strCode & "','" & StudyName & "')"
   DoCmd.RunSQL strSQL
      
' het formulier materialen wordt nu geopend en de waardes van de patientID en de gekozen studynamen worden meegenomen als startvariabelen
    strArgs = strCode & "|" & Me.fraStudyName.Value & "|" & StudyName
    DoCmd.OpenForm "Frm_Materials", , , , acFormAdd, , strArgs
    DoCmd.Close acForm, "Frm_Patient", acSavePrompt
    
End Sub

Ik heb heel even de volledige code erbij gedaan, zodat iedereen kan zien wat ik tot nu heb staan.

Ik denk dat mijn fout zit in

Code:
' het formulier materialen wordt nu geopend en de waardes van de patientID en de gekozen studynamen worden meegenomen als startvariabelen
    strArgs = strCode & "|" & Me.fraStudyName.Value & "|" & StudyName
    DoCmd.OpenForm "Frm_Materials", , , , [B][U]acFormAdd[/U][/B], , strArgs
    DoCmd.Close acForm, "Frm_Patient", acSavePrompt
    
End Sub

Als ik dit (dik gedrukte en onderstreept, acrFormAdd) namelijk verander in acFormEdit doet die het namelijk wel maar dan krijg ik het volgende probleem als ik een nieuwe patient wil invoeren dan klik ik op mijn knop next patient (code hieronder) dan opent die dus netjes mijn andere formulier maar krijg ik de "oude" ingevulde gegevens vervolgens op mijn frm_materials weer te zien. Als ik hier nu andere gegevens invoer dan wijzigt die deze in de eerste ingevoerde patient.

Code:
Private Sub knNextPatient_Click()
  On Error GoTo Err_Next_Patient_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "Frm_Patient"
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Next_Patient_Click:
    Exit Sub

Err_Next_Patient_Click:
    MsgBox Err.Description
    Resume Exit_Next_Patient_Click
End Sub

Ik weet vrij zeker dat de fout ergens in die codes moet zitten maar ik zie het niet meer, wie wel?

Groetjes,

Simone

Bekijk bijlage Patientendatabase3.rar
 
Laatst bewerkt:
Ik krijg een klein beetje schaamrood op de kaakjes, vrees ik.... :o
De hele OpenArgs is prima, alleen staat de code bij het tweede formulier op de verkeerde plek. Hij moet bij de gebeurtenis <Bij Laden> staan, niet <Bij openen>.
 
Als ik code bij <bij laden> zet dan opent die dus wel gewoon formulier ed. Geen probleem.

Als ik acFormAdd verander in acFormEdit voegt die dus zoals ik eerder al aangaf de ingegeven getallen gewoon bij de juiste patient. Met acFormAdd maakt die daar een nieuw regeltje van in de tabel (is dus niet de bedoeling)

Dat klopt tot nu toe allemaal, dan is het eigenlijk alleen nog maar de code die achter de knop hangt die het probleem kan zijn lijkt mij (ik hoop het laat ik het zo zeggen).

Idee?

Groetjes,

Simone
 
Heb er toch een werkende versie van gemaakt ;)
 

Bijlagen

Oke de oplossing die ik heb gebruikt is;


Frm_Patient:
Code:
Private Sub fraStudyName_AfterUpdate()
  
  Dim strArgs As String
  Dim strLaatsteCode As String
  Dim strCode As String
  Dim strSQL As String
  Dim intCode As Integer, i As Integer

  Select Case Me.fraStudyName
    Case 1
      Me.StudyName = "Anakinra"
    Case 2
      Me.StudyName = "Cardio"
    Case 3
      Me.StudyName = "CB"
    Case 4
      Me.StudyName = "CVID"
    Case 5
      Me.StudyName = "Diabetes"
    Case 6
      Me.StudyName = "HC"
    Case 7
      Me.StudyName = "HPV"
    Case 8
      Me.StudyName = "JIA"
    Case 9
      Me.StudyName = "JDM"
    Case 10
      Me.StudyName = "MTX"
    Case 11
      Me.StudyName = "RA"
    Case 12
      Me.StudyName = "Transitie"
    Case 13
      Me.StudyName = "Vaart"
    Case 14
      Me.StudyName = "Wheezer"
  End Select

'' Mbv de query qLaatstePatientID wordt uit de tabel patient het laatst gebruikte ID opgehaald
    strSQL = "SELECT TOP 1 Last(PatientID) AS PatientCode FROM Tbl_Patient;"
    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

    If Me.Dirty Then Me.Dirty = False

' de gegevens worden bewaard waardoor deze kunnen worden toegevoegd aan de tabel Materialen
    strSQL = "INSERT INTO Tbl_Materials( PatientID, [Study Name]) "
    strSQL = strSQL & "VALUES('" & strCode & "','" & StudyName & "')"
    DoCmd.RunSQL strSQL
      
' het formulier materialen wordt nu geopend en de waardes van de patientID en de gekozen studynamen worden meegenomen als startvariabelen
    strArgs = strCode & "|" & Me.fraStudyName.Value & "|" & StudyName
    DoCmd.OpenForm "Frm_Materials", , , , acFormEdit, , strArgs
    DoCmd.Close acForm, "Frm_Patient", acSavePrompt

End Sub

Frm_Materials
Code:
Private Sub Form_Load()

Dim strArgs() As String
        
        DoCmd.GoToRecord , , acLast
        fraActiveRemission.Visible = False
        fraSubClassJIA.Visible = False
        fraSubClassMTX.Visible = False
        fraTimePointStudyCardio.Visible = False
        fraTimePointStudyHPV.Visible = False
        fraTimePointStudyMTXVaart.Visible = False
        fraTimePointStudyTransitie.Visible = False
        Plasma.Visible = False
        NumberVials1.Visible = False
        Serum.Visible = False
        NumberVials2.Visible = False
        PBMC.Visible = False
        NumberVials3.Visible = False
        CellsPBMC.Visible = False
        CellsMLPBMC.Visible = False
        SFPLasma.Visible = False
        NumberVials4.Visible = False
        Urine.Visible = False
        NumberVials5.Visible = False
        Lysate.Visible = False
        NumberVials6.Visible = False
        SFMC.Visible = False
        NumberVials7.Visible = False
        CellsSFMC.Visible = False
        CellsMLSFMC.Visible = False
  
    If Not Nz(Me.OpenArgs, "") = "" Then
        strArgs = Split(Me.OpenArgs, "|")
        On Error Resume Next
        Me.txtPatientID = CStr(strArgs(0))
        Me.fraStudyName.Value = strArgs(1)
        Call fraStudyName_AfterUpdate
    End If
    
End Sub

En het werkt nog ook! Problem solved!

Groetjes,

Simone
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan