Springen naar juiste record bij openen formulier

Status
Niet open voor verdere reacties.

wvgijn

Gebruiker
Lid geworden
25 okt 2006
Berichten
11
Graag wil ik jullie hulp vragen bij het volgende probleem: in een patientendatabase met een 'hoofdformulier' wil ik een apart invulformuliermaken voor patientengegevens om die zelfde gegevens in het hoofdfomulier read only te maken (om onbedoelde mutaties te voorkomen).

Het is dus de bedoeling om met een knop uit het hoofdfomulier het invulformulier te openen, maar het invulformulier moet dat wel springen naar het juiste record. Dit is mogelijk met de wizard waarbij wordt gefilterd op die ene patient. Bij het sluiten van het invulformulier ververst het hoofdformulier vanzelf.

Tot zover geen problemen. Als ik echter een nieuwe patient wil toevoegen kom ik in de problemen: als ik in het hoofdformulier een knop met record toevoegen maak en dan het invulformulier open, krijg ik een linkfout omdat als er nog niks is ingevuld acces nog geen primary key (autonum) heeft gemaakt. En wanneer ik in het invulformulier een knop 'nieuwe patient' maak dan keert hij niet terug bij dit nieuwe record na het sluiten van het invulformulier. Sterker nog: het duurt even voordat ik de nieuw aangemaakte patient kan terugvinden in het hoofdformulier.

Ik ben geen IT-er maar arts, en hoop dat jullie me kunnen helpen. Volgens mij is dit op te lossen door geen filter toe te passen maar de functie FINDFIRST, zoals ik die heb gevonden in http://www.helpmij.nl/forum/showthread.php?t=260223

Het lukt mij echter niet deze functie werkend te krijgen, dit is wat ik heb geprobeerd:

Private Sub nieuwwijzig_Click()

Dim rst As DAO.Recordset

DoCmd.OpenForm "invultabel", acNormal, , , , acDialog
'juiste record tonen

Set rst = Me.RecordsetClone

rst.FindFirst [patientnr] = "& '" & Me![patientnr] & "'"
If rst.NoMatch Then
MsgBox "Record not found"
Else
Me.Bookmark = rst.Bookmark
End If
rst.Close

End Sub


Heel graag hulp bij bovenstaande code of een betere oplossing. Veel dank, Wvg
 
Lijkt mij logisch dacht ik. Deze functie laat volgens mij altijd het record zien dat op het moment zichtbaar is. DoCmd.OpenForm "invultabel", acNormal, , , , acDialog zegt eigenlijk genoeg. Er is geen dialog, en weet dus ook niet wat te zoeken. Ik denk dat het makkelijkste is : je maakt een onafhankelijk formuliertje. Zet daar een tekstvak in en geef dit de naam vb "Patient" Maak nu een opdrachtknop op dit formulier en bij gebeurtenis, bij klikken zet je

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "invultabel"
stLinkCriteria = "[Patientnr]=" & "'" & Me![Patient] & "'"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Oh ja op je invulformulier moet je dan ook een opdracht knop maken die het nieuwe formuliertje open maakt.
 
Dank voor het antwoord, het is helaas niet precies wat ik bedoel. Ik was vannacht moe en heb me niet duidelijk uitgedrukt.

Ik heb dus een "hoofdformulier" waarbij bepaalde patientengegevens zoals patientnummer, geboortedatum en naam zichtbaar zijn maar niet aan te passen (vergrendeld). Dit heb ik gedaan omdat er te vaak perongeluk iets werd veranderd als gebruikers zoeken naar een patient.

Ik heb een tweede "invulformulier" gemaakt waarin deze gegevens wel zijn te wijzigen. Met een knop uit het "hoofdformulier" wordt het "invulformulier" geopend met het juiste record. Deze knop heb ik met de wizard gemaakt en gebruikt volgens mij precies dezelfde code als in je antwoord. Hierbij wordt het formulier gefilterd op dat ene record. Als je na het wijzigen van gegevens het "invulformulier" sluit refresht het "hoofdformulier" automatisch. Tot zover dus geen problemen.

Echter, hoe vaak wijzig je nou een geboortedatum of naam? Eigenlijk nooit. Het gaat dus juist om het invoeren van een nieuwe patient, en daar zit het probleem. Als ik in het hoofdformulier een nieuw record maak en (voordat er iets in het nieuwe record is ingevuld) via de knop het invulformulier open na het invoeren van gegevens (in het invulformulier) dit weer sluit, krijg ik deze nieuw ingevoerde gegevens niet te zien in het hoofdformulier.

Er zou dus in het invulformulier een knop moeten zitten met de volgende functie: sla huidig (nieuw) record op, ververs hoofdformulier en spring naar dit nieuwe record. HEEL BELANRIJK is dat dit niet gebeurd door de filteren: gebruikers moeten door de patienten kunnen scrollen en zo andere filters kunnen gebruiken voor bepaalde selecties.

Hopenlijk kunnen jullie mij helpen,

Veel dank,

WvG
 
Ik weer wat verder. Als ik een nieuwe patient wil invoeren open ik het invulformulier met een knop uit het hoofdformulier met de volgdende code:

Private Sub nieuwe_patient_Click()
On Error GoTo Err_nieuwe_patient_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "invultabel"
DoCmd.OpenForm stDocName, , , stLinkCriteria, acFormAdd

Exit_nieuwe_patient_Click:
Exit Sub

Err_nieuwe_patient_Click:
MsgBox Err.Description
Resume Exit_nieuwe_patient_Click

End Sub


Hiermee opent het invulformulier met een nieuw record, waar ik vervolgens de gegevens kan invullen. Op het subformulier heb ik een knop [sla op en keer terug naar hoofdformulier] met de volgdende code en hierbij heb ik jullie hulp nog nodig:

Private Sub formulier_openen_Click()
On Error GoTo Err_formulier_openen_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "Vaatformulier"
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.Requery
DoCmd.GoToRecord , , acLast
DoCmd.Close acForm, "invultabel"

Exit_formulier_openen_Click:
Exit Sub

Err_formulier_openen_Click:
MsgBox Err.Description
Resume Exit_formulier_openen_Click



End Sub


Zoals je kan zien opent hij het hoofdformulier, refresht het en sluit vervolgens het invulformulier.

Het probleem: Ik wil natuurlijk dat hij dan in het hoofdformulier springt naar het zojuist gecreeerde record. Dit heb ik geprobeerd met DoCmd.GoToRecord , , acLast. Als ik de tabel sorteer op oplopende primary key (autonum) werkt dit, maar zodra iemand bijvoorbeeld de namen op alfabeth selecteerd niet meer. Beter zou zijn om hem dus naar het juiste record te laten springen obv patientnummer of primary key, maar dan ZONDER FILTER! Kan dit met GoToRecord of moet dit met Findnext?. Als dit lukt werkt namelijk alles!

alvast veel dank,

WvG
 
Probeer eens of dit wil lukken.


Private Sub formulier_openen_Click()
On Error GoTo Err_formulier_openen_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "Vaatformulier"
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.Requery
DoCmd.GoToRecord acForm, "Vaatformulier", acLast
DoCmd.Close acForm, "invultabel"

Exit_formulier_openen_Click:
Exit Sub

Err_formulier_openen_Click:
MsgBox Err.Description
Resume Exit_formulier_openen_Click
 
wederom dank. Helaas is dat niet de oplossing. Hij springt heel goed in het "vaatformulier" naar het laatste record. Alleen hang het maar net van je sorteer volgorde af wat het laatste record is. Het zou beter zijn als je kan springen naar het juiste record op basis van primary key of patientnummer.

Moet dit met Findnext? findrecord? of op een andere manier?

Hier http://www.helpmij.nl/forum/showthread.php?t=260223
staat beschreven wat ik wil, alleen lukt het me niet deze code werkend te krijgen.

dank en groet, WvG
 
je kunt het nummer van de huidige record opslaan in een variabele

bijvoorbeeld
y = CurrentRecord

in het nieuwe formulier (gabseerd op dezelfde tabel)
kun je dan zeggen
DoCmd.GoToRecord , , , y
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan