wat doe ik fout?

  • Onderwerp starter Onderwerp starter iegje
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

iegje

Gebruiker
Lid geworden
25 apr 2007
Berichten
125
Met een knop wil ik een formulier openen, nu is dat geen enkel probleem. Alleen wil ik dat bij het openen van het formulier het personeelsnummer onthouden wordt, zodat dit niet opnieuw ingevuld hoeft te worden bij het toevoegen van gegevens.

Onder de knop heb ik de volgendende code
Code:
Private Sub toevoegen_Click()
On Error GoTo Err_toevoegen_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "frminvoerenopleiding"
    stLinkCriteria = "[personeelsnummer] =" & Me![personeelsnummer]
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_toevoegen_Click:
    Exit Sub

Err_toevoegen_Click:
    MsgBox Err.Description
    Resume Exit_toevoegen_Click
    
End Sub

maar hiermee werkt het niet zoals ik wil.

Wie kan me hierbij helpen?
 
Het werkt, of het werkt niet.... Als het niet werkt: wat gaat er precies fout? Krijg je een foutmelding, of geen werkend filter? Kun je met een msgbox opvragen wat de inhoud is van de variabele stLinkCriteria? Ik vermoed namelijk dat je een tekstveld hebt, terwijl het filter een getal verwacht.
 
Het filter werkt niet. Ik krijg geen foutmelding.

Hoe vraag ik een msgbox op?
 
Zet boven de regel Docmd.OpenForm de regel: Msgbox stLinkCriteria. Dan zie je wat er in het filter staat.
 
msgbox geft aan [personeelsnummer]=1234

Dit is ook het personeelsnummer wat alvast ingevuld moet worden.
Het is een invulformulier, de rest van de gegevens moeten zelf nog ingevuld worden.
 
Dat riekt als een getal; is je personeelsnummer ook een numeriek veld, of misschien een tektsveld?
 
In alle tabellen staat het personeelsnummer op numeriek
 
Wat is de foutmelding? En moet ik nog een open deur intrappen door te vragen of het veld [personeelsnummer] wel in je formulier zit?
 
Er is geen foutmelding :(
Ik krijg getal 0 in beeld
En mijn tekstvak heet personeelsnummer, besturingselementbron [personeelsnummer]
 
Laatst bewerkt:
Dat van die foutmelding had ik in de gauwigheid verkeerd gelezen :) Ik zie dit nog in een eerder berichtje:
Het is een invulformulier, de rest van de gegevens moeten zelf nog ingevuld worden.
Jet formulier staat toch niet toevallig in de Gegevensinvoer modus?
 
Elegant..... Dat hangt er vanaf of je hetzelfde formulier voor meer doeleinden kunt gebruiken. Meestal wel overigens... Om te beginnen: zet de instelling van het formulier weer op de gewone instelling. Maak (of pas) een knop aan waarmee je het formulier in Gegevensinvoer opent of in normale weergave, door de juiste parameter mee te geven voor normale weergave met filter, en voor Gegevensinvoer.
Dat zijn dan de volgende twee opties:

Code:
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    DoCmd.OpenForm stDocName, , , , acFormAdd

Zoals je ziet, staat er geen filter meer in de tweede regel, maar wel is er een extra optie toegevoegd: acFormAdd. Deze doet hetzelfde als de optie Gegevensinvoer op JA zetten. Omdat deze methodiek veel meer mogelijkheden biedt dan een formulier vast instellen op één taak, raad ik eigenlijk altijd aan om het op deze manier te doen: hou je formulieren voor algemeen gebruik, en geef startopties mee voor specifieke taken.
 
Dus nu wordt de code?

Code:
Private Sub toevoegen_Click()
On Error GoTo Err_toevoegen_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "frminvoerenopleiding"
    stLinkCriteria = "[personeelsnummer] =" & Me![personeelsnummer]
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    DoCmd.OpenForm stDocName, , , , acFormAdd

Exit_toevoegen_Click:
    Exit Sub

Err_toevoegen_Click:
    MsgBox Err.Description
    Resume Exit_toevoegen_Click
    
End Sub

Dan worden alle velden ingevuld, terwijl alleen het personeelsnummer ingevuld moet worden en de rest leeg moet blijven.
 
Laatst bewerkt:
Je moet kiezen voor één van de twee OpenForm regels; ik zou dus twee knoppen maken: één voor het opzoeken van een record, en één voor het toevoegen van een nieuw record. Tenzij je iets heel anders wilt, bijvoorbeeld het standaard invullen van een veld bij het aanmaken van een nieuw record....
 
En dan gaat het, neem ik aan om het veld [personeelsnummer]? Als je één waarde mee wilt nemen naar het nieuwe formulier is het relatief simpel, bij meerdere verschillende velden wordt het iets lastiger. Maar laten we maar eens beginnen met één veldje te vullen ;)
Wat je gaat doen is het volgende: je geeft een variabele mee aan het formulier, en wel een speciale, namelijk de variabele OpenArgs. Deze krijgt de waarde van het personeelsnummer.

Code:
    DoCmd.OpenForm "frminvoerenopleiding", , , , acFormAdd, , Me.personeelsnummer

Als het formulier wordt geopend ( in de modus Gegevensinvoer) moet de OpenArgs variabele worden uitgelezen, en in het veld Personeelsnummer worden gezet. Dat gebeurt bij het Laden van het formulier:

Code:
Private Sub Form_Load()
    If Not Nz(Me.OpenArgs, "") = "" Then
        Me.personeelsnummer= Me.OpenArgs
    End If
End Sub

Met een IF..END IF wordt eerst gecontroleerd of de variabele OpenArgs leeg is of niet; in het laatste geval zou je anders een foutmelding krijgen, en dat wil je uiteraard niet. Dus als hij niet leeg is, zoals in het voorbeeld, wordt de waarde in het formulierveld Personeelsnummer geplaatst. En dat is eigenlijk alles...
Ik zie nu dat je dit eigenlijk al in het begin vroeg; beetje sloom gelezen dus :o
 
Laatst bewerkt:
Dit is precies wat ik bedoel :)

Dank je Octafish, dat het wat langer heeft geduurd geeft niets.
Nu heb ik er ook extra van geleerd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan