recordsource lstbox veranderen

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

scw

Gebruiker
Lid geworden
5 jun 2009
Berichten
530
Hallo,

Als bijlage een voorbeeld bestandje waar ik niet uitkom. Ik heb een knop 'Rapporten B" met daarachter een wachtwoord. Indien het wachtwoord correct is (uiteraard) dan zou in de lstbox van frmRapporten de tblRapportenB moeten worden weergegeven ipv tblRapporten A. Nu ben ik al aardig op weg, maar het loopt nog net mis... het object kan niet worden gevonden.

Hoe kan ik neerzetten dat de listbox op frmRapporten dan wordt gewijzigd, bij het OnClick event van frmWachtwoord? Is het ook mogelijk om de standaardwaarde/default value van de listbox mee te veranderen in VBA, en zo ja hoe? Dus als tblRapportenA de recordsource is, dan default value=rapport A en als tblRapportenB de recordsource is dan default value=rapport B.

Bedankt hoor,
scw :thumb:
 

Bijlagen

nog niet gelukt...

Heeft iemand toevallig nog suggesties voor mij? :thumb:
 
Ik kan helaas geen bestand uploaden, maar heb wel de oplossing.... Kun je tot vanavond wachten, of wil je 'm in code hebben?
 
Bedankt!

Ahah, natuurlijk geen probleem in code moet dat ook wel lukken. Ik heb het idee dat ik nog dat laatste puzzelstukje mis zeg maar...

Superbedankt!

scw:D
 
Ik heb het zo opgelost:
Om te beginnen: ik heb op het formulier frmrRapporten de tabel [tblWachtwoord] als Recordbron ingesteld. Vervolgens een tekstvak [txtWachtwoordCheck] gemaakt, en het tekstvak [txtWachtwoord] uit de Lijst met velden gehaald.
Op de knop [Rapporten B...] staat nu deze code:

Code:
Private Sub cmdNext_Click()

    Me.txtWachtwoordCheck = ""
    DoCmd.OpenForm "frmWachtwoord", acNormal, , , , acDialog
    If Me.txtWachtwoord = Me.txtWachtwoordCheck Then
        Me.lstReports.RowSource = "tblRapportenB"
    Else
        Me.lstReports.RowSource = "tblRapportenA"
    End If

End Sub
Hiermee wordt het formulier frmWachtwoord in modale modus geopend. Hierdoor kun je de vervolgcode laten uitvoeren op het formulier frmRapporten.

Op het formulier frmWachtwoord staat nu deze code op de knop OK:

Code:
Private Sub cmdOK_Click()
    If txtWachtwoordInvoer = "" Or txtWachtwoordInvoer = Empty Then
        MsgBox "Geen wachtwoord ingevuld", vbInformation, "Required Data"
        Me!txtWachtwoordInvoer.SetFocus
    ElseIf Me.txtWachtwoordInvoer = Me.txtWachtwoord Then
        Forms!frmrapporten.txtWachtwoordCheck = Me.txtWachtwoordInvoer
    Else
        MsgBox "Het wachtwoord is incorrect - u heeft geen toegang", vbOKOnly, "Voorbeeld DB"
    End If
    DoCmd.Close acForm, Me.Name

End Sub

De werking: Je opent het wachtwoordformulier met de knop. Na het intikken van een wachtwoord wordt het wordt het ingetikte wachtwoord op het formulier frmRapporten gezet, en wordt het ww formulier gesloten.
In de vervolgcode wordt het wachtwoord gecontroleerd, en wordt de bron van de keuzelijst aangepast.
 
Hoi Michel, OK het is me wel aardig duidelijk, maar nog niet helemaal (excuses daarvoor):

Je zegt: ik heb het tekstvak [txtWachtwoord] uit de Lijst met velden gehaald, ik neem aan dat je daarmee bedoeld dat je echt het tekstvak in de design view van het formulier frmWachtwoord eruit hebt gehaald? En niet in de tabel? Maar waarom plaats je dan eenzelfde veld op het form genaamd txtWachtwoordCheck? Kun je dan niet in plaats daarvan gewoon txtWachtwoord hernoemen naar txtWachtwoordCheck? Daarnaast noem je in de code nog gewoon txtWachtwoord?

Code:
If Me.txtWachtwoord = Me.txtWachtwoordCheck Then

En dan heb je nog neergezet:

Code:
DoCmd.Close acForm, Me.Name

Alleen zie ik even niet welk object Name heet??

Excuses nogmaals.
 
Had ik inderdaad wel wat strakker kunnen omschrijven :)
Ik heb dus het formulier frmRapporten gekoppeld aan de tabel Wachtwoord, en het veld Wachtwoord op het formulier gezet; dit heb ik vervolgens als naam [txtWachtwoord] gegeven.
Het wachtwoord wordt in mijn voorbeeld niet meer gecontroleerd op het formulier frmWachtwoord, maar dus op frmRapporten. Vandaar dat daar nu een extra tekstvak is bijgezet, txtWachtwoordCheck. op frmWachtwoord kun je de tekstvakken dus eigenlijk verwijderen... Welke naam je ze geeft, is uiteraard verder niet belangrijk!
 
OK duidelijk,

het enige is dat die nu nog een error blijft geven:


" Op het formulier frmWachtwoord staat nu deze code op de knop OK:


Code:
Private Sub cmdOK_Click()
If txtWachtwoordInvoer = "" Or txtWachtwoordInvoer = Empty Then
MsgBox "Geen wachtwoord ingevuld", vbInformation, "Required Data"
Me!txtWachtwoordInvoer.SetFocus
ElseIf Me.txtWachtwoordInvoer = Me.txtWachtwoord Then"


Maar txtWachtwoord is natuurlijk verwijderd van frmWachtwoord???

"op frmWachtwoord kun je de tekstvakken dus eigenlijk verwijderen... "



:confused: Excuses, dat het nog niet lukt..
 
Dat krijg je er van als je te snel tikt.... Je hebt natuurlijjk wel een tekstvak nodig om het wachtwoord in te typen. De controle op een correct wachtwoord kun je in zijn geheel naar frmRapporten verplaatsen; de Else wordt gebruikt om het ingetypte wachtwoord op het formulier frmRapporten te zetten.
De code op het frmWachtwoord:

Code:
Private Sub cmdOK_Click()
    If txtWachtwoordInvoer = "" Or txtWachtwoordInvoer = Empty Then
        MsgBox "Geen wachtwoord ingevuld", vbInformation, "Required Data"
        Me!txtWachtwoordInvoer.SetFocus
        Exit Sub
    Else
        Forms!frmrapporten.txtWachtwoordCheck = Me.txtWachtwoordInvoer
    End If
    DoCmd.Close acForm, Me.Name

End Sub

De code op het frmRapporten:

Code:
Private Sub cmdNext_Click()

    Me.txtWachtwoordCheck = ""
    DoCmd.OpenForm "frmWachtwoord", acNormal, , , , acDialog
    If Me.txtWachtwoord = Me.txtWachtwoordCheck Then
        Me.lstReports.RowSource = "tblRapportenB"
    Else
        MsgBox "Het wachtwoord is incorrect - u heeft geen toegang", vbOKOnly, "Voorbeeld DB"
        Me.lstReports.RowSource = "tblRapportenA"
    End If

End Sub
 
Hij doet het !!! Geweldige hulp! :D Bedankt hiervoor!

Nu ga ik zelf nog even knutselen: ik wil een knop maken dat je dan ook weer terug kunt schakelen naar recordsource met RapportenA. Moet ik dit eigenlijk aanpakken door in vba de ELSE weer andersom te maken of zou je het doen dat je de textbox PasswordCheck weer leegmaakt? Dus if PasswordCheck is "" dan recordsource is RapportenA??

Nou goed, daar moet ik uiteindelijk wel uitkomen en anders zul je me wel horen natuurlijk ;) Ben blij dat dit nu ten minste werkt!

Bedankt nogmaals
 
Er zijn verschillende opties. Je kunt inderdaad wel iets maken dat de bron wordt gereset als je het wachtwoordvak leeg maakt via een AfterUpdate bijvoorbeeld. Verzin maar wat leuks ;)
 
Euhmmm... reset suggereer je :o nu maak je me nieuwsgierig: ik ben wel benieuwd hoe dat nu precies zou gaan met een reset?? Bovendien vroeg ik me nog af, of de standaardwaarde die in de formuliereigenschappen staat, ook gestuurd kan worden met VBA? Dit omdat ik hier niets over kon vinden op het web. Nu veranderd natuurlijk de listbox recordsource, maar de standaardwaarde hangt aan 1 recordsource :)
 
Hoi Michel!

Ik heb toch nog een vraagje over deze oplossing: :o

Wat is precies het nut van:

Code:
Me.txtWachtwoordCheck = ""
op de On Click event van cmdNext??

Ik stuit namelijk op het volgende probleem. Nu ik een knop cmdBack heb gemaakt (om terug te gaan naar de oorspronkelijke listbox recordsource), en ik tab drie keer (over de Annuleren knop heen)... dan werkt het niet meer. txtWachtwoord wordt dan blanco gemaakt en dan geeft die telkens wachtwoord is incorrect.

Hoe kan ik dit voorkomen? Door
Code:
Me.txtWachtwoordCheck = ""
te verwijderen? Want welk nut heeft het zeg maar?

Alvast bedankt maar weer,

scw :thumb:
 

Bijlagen

Het checkveld wordt leeggemaakt om de controle goed uit te kunnen voeren. Als je er last van hebt, kun je eens kijken wat er gebeurt als je de code deactiveert (enkele quoot ervoor zetten).
Als het verder niet uitmaakt in jouw proces, dan kun je de regel zonder problemen verwijderen.
 
OK ik heb de regel inderdaad gedeactiveerd met een ' ervoor. Maar er zit toch nog iets anders fout, waar ik niet achter kom: er gaat nog iets mis als je over de Annuleren knop heentabt, dan wordt plots het veld txtWachtwoord leeggemaakt, maar waarom?? :confused:
 
Staat daar niet ook een opdracht om de velden leeg te maken?
 
Nee dat had ik al gecheckt. Ik heb voorbeeld bijgevoegd in m'n bericht van 11:29 uur in Access 2003 formaat ;)
 
Je zou de gevaarlijkste toetsen kunnen uitschakelen:

Code:
 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode = vbTab Or KeyCode = vbKeyPageDown Or KeyCode = vbKeyPageUp Then KeyCode = 0
End Sub
 
scw,

voeg even een voorbeeldbestand bij inclusief alles wat nodig is om met je formulier te kunnen werken (tabellen, queries, rapporten, de hele rimbam).

Tardis
 
@Tardis:
Alles wat je nodig hebt zit in het bestand. Er zjn wat objecten verborgen...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan