form buttons activeren obv autorisatieniveau

Status
Niet open voor verdere reacties.

Dencar77

Gebruiker
Lid geworden
15 mrt 2013
Berichten
131
Hoi iedereen,

ik kom er maar niet achter wat de juiste VBA is om op basis van autorisatieniveaus bepaalde knoppen op formulieren te laten activeren.

Mijn Inlogdatabase begint als eerste met een splashscreen. Na 3 seconde gaat deze over op de inlogscherm. Dit scherm zegt het natuurlijk al, hier dient men zich aan te melden middels naam en wachtwoord. Tot zover lukt het me nog. Dan, indien de naam en wachtwoord combi correct is opent zich een schakelbord. Dit schakelbord heeft 4 toetsen ((Medewerker | Rayonleider | In-en Verkoop | Beheerder ) (resp. autorisatieniveau 1|2|3|4)).

Nu wil ik graag dat wanneer een Medewerker (aut.niv. 1) zich aanmeld dat deze dus alleen de knop "Medewerker"kan indrukken (enable) en de overige niet (disable). En dit wil ik ook voor de overige toepassen. Elke knop leidt naar een eigen formulier.

Maar dit lukt me dus niet. Ik kan niet mijn beginners-beginners ervaring op VBA hierop losgooien (boek VBA ACCESS 2007 for DUMMIES is reeds besteld).
Heeft iemand een oplossing hiervoor?


Tabel:
MedID=primaire sleutel (autonummering)
Medewerker=Tekst
Wachtwoord=Tekst
Autorisatie niveau=Numeriek

Formulieren:
AanmeldschermAOB
Frm_SchakelbordAOB
Frm_Splashscreen
FrmHoofdschermBeheerder
FrmHoofdschermRayon
FrmHoofdschermInenVerkoop
FrmHoofdschermWerknemer

Frm_SchakelbordAOB:
op dit scherm bevinden zich 4 knoppen die naar de bovenstaande hoofdschermen gaan.
Medewerker (naam:BtnHoofdschermMedewerker)
Rayon Leider(Naam:BtnHoofdschermRayon)
In-/ Verkoop (Naam:BtnHoofdschermInenVerkoop)
Beheerder (Naam:BtnHoofdschermBeheerder)


Noot: Ik probeer mijn voorbeeld InlogDB database toe te voegen, echter ik ben al 20 minuten bezig om deze hier toe te voegen. Het is een .zip bestand van 260kb...sorry.
 
Laten we eerst eens de (in mijn ogen) nogal omslachtige werkwijze doornemen. Om te beginnen gebruik ik zelf nooit splash screens; overbodig, neemt nodeloos tijd in beslag om te verdwijnen en geen enkele gebruiker zit daar keer op keer op te wachten. Combineer de layout (want je zult vast iets moois laten zien) met je inlogscherm. Volgende stap: waarom een schakelbord? Een medewerker mag op basis van zijn autorisatie één knop indrukken. Wat is dat voor keuze? Kun je toch net zo goed dat doelgroepformulier opstarten vanaf het inlogscherm? Bovendien zou ik knoppen die je niet mag gebruiken onzichtbaar maken, dan kun je ze ook niet indrukken.
Verder kunnen we zonder de door jou gebruikte code niet zo heel veel zien.
Als laatste: een db die te groot is kun je met WinRar in brokken van 100kb laten zippen, en die kun je wel posten. Of je zet je db (al dan niet gezipt) op een site als mijnbestand.nl
 
Laatst bewerkt:
http://www.mijnbestand.nl/Bestand-PWPT8AEUDQHO.zip

Indien het bestand niet goed gelukt is met uploaden, mijn excuses daarvoor. Ik heb nog nooit eerder met uploaden gewerkt.

Een resume:

- Splashscreen is een overbodige luxe. (Daar kan ik me wel iets bij inzien. Voor mij is het een test of het mij ook zou lukken.
- Schakelbord is inderdaad de intentie om na het inloggen de medewerker op het juiste hoofdscherm terecht te laten komen, "keuze" is inderdaad een te groot woord hierbij. De knop zichtbaar/onzichtbaar was wel een idee die door mijn hoofd ging :(.
- doelgroepformulier opstarten met inlogscherm zou voor mij nog beter zijn. Dan is de schakelbord zoals je aangaf overbodig. Ik zal dan de code die ik voor de aanmeldscherm (inlogscherm) gebruik hieronder toevoegen.

Code:
Option Compare Database
Option Explicit
Private intLogonAttempts As Integer

Private Sub BtnAanmelden_Click()

'Controleert of er data in de Werknemer combo box is ingevoerd

    If IsNull(Me.cboWerknemer) Or Me.cboWerknemer = "" Then
        MsgBox "U bent uw naam vergeten in te voeren.", vbOKOnly, "Required Data"
       Me.cboWerknemer.SetFocus
      Exit Sub
    End If
    
  'Controleert of data is ingevoerd in het wachtwoord tekstvlak
  
    If IsNull(Me.txtWachtwoord) Or Me.txtWachtwoord = "" Then
        MsgBox "U bent uw wachtwoord vergeten in te voeren.", vbOKOnly, "Required Data"
        Me.txtWachtwoord.SetFocus
      Exit Sub
    End If
    
  'Controleert de waarde van het wachtwoord in Tbl_medewerker of deze past bij de gekozen waarde in combo box
    
    If Me.txtWachtwoord.Value = DLookup("Wachtwoord", "[Tbl_Medewerker]", "[MedId]=" & Me.cboWerknemer.Value) Then
      MyMedId = Me.cboWerknemer.Value
      
  'Sluit aanmeldscherm en open hoofdmenu
  
      DoCmd.Close acForm, "AanmeldschermAOB", acSaveNo
      DoCmd.OpenForm "Frm_SchakelbordAOB"
      
      Else
      MsgBox "Wachtwoord niet valide. Probeert u nogmaals.", vbCritical + vbOKOnly, "Ongeldige invoer!"
      Me.txtWachtwoord.SetFocus
   End If
   
  'Wanneer gebruiker het wachtwoord 3 keer onjuist invoert dan zal de database sluiten
  
     intLogonAttempts = intLogonAttempts + 1
    If intLogonAttempts > 2 Then
      MsgBox "U heeft geen toegang tot de database. Neem contact op met de beheerder.", vbCritical, "Toegang geweigerd!"
      Application.Quit
      
    End If

End Sub

Private Sub BtnVerlaat_Click()
DoCmd.Quit
End Sub
 
Ik kan de db niet openen (geen 2003) maar je code kan simpeler. Er vanuit gaande dat je de 4 formulieren voor de verschillende access levels nummert, dan werkt dit prima (alleen de relevante code):
Code:
    strSQL = "SELECT MedId, Wachtwoord, [Autorisatie niveau] FROM Tbl_Medewerker WHERE [MedId]=" & Me.cboWerknemer.Value
    With CurrentDb.OpenRecordset(strSQL)
        MyMedId = .Fields("MedId").Value
        WW = .Fields("Wachtwoord").Value
        MyLevel = .Fields(2).Value
        If Me.txtWachtwoord.Value = WW Then
            sForm = "UserformLevel" & MyLevel
            DoCmd.Close acForm, "AanmeldschermAOB"
            DoCmd.OpenForm sForm
        Else
            MsgBox "Wachtwoord niet valide. Probeert u nogmaals.", vbCritical + vbOKOnly, "Ongeldige invoer!"
            Me.txtWachtwoord.SetFocus
        End If
        .Close
    End With
 
Laatst bewerkt:
En nog een variant met je huidige formuliernamen: (zag ze nu pas ;) )

Code:
    strSQL = "SELECT MedId, Wachtwoord, Autorisatie FROM Tbl_Medewerker WHERE [MedId]=" & Me.cboWerknemer.Value
    With CurrentDb.OpenRecordset(strSQL)
        MyMedId = .Fields("MedId").Value
        WW = .Fields("Wachtwoord").Value
        MyLevel = .Fields("Autorisatie").Value
        If Me.txtWachtwoord.Value = WW Then
            Select Case MyLevel
                Case 1
                    sForm = "FrmHoofdschermBeheerder"
                Case 2
                    sForm = "FrmHoofdschermRayon"
                Case 3
                    sForm = "FrmHoofdschermInenVerkoop"
                Case 4
                    sForm = "FrmHoofdschermWerknemer"
            End Select
            DoCmd.Close acForm, "AanmeldschermAOB"
            DoCmd.OpenForm sForm
        Else
            MsgBox "Wachtwoord niet valide. Probeert u nogmaals.", vbCritical + vbOKOnly, "Ongeldige invoer!"
            Me.txtWachtwoord.SetFocus
        End If
        .Close
    End With
 
de pc geef ddr aan maar ik kom ook niet in de bios wie weet wat ik moet doen
 
@milana: je vraag staat denk ik in een compleet verkeerd forum. Vraag even aan de moderator of hij 'm wil verplaatsen naar de juiste.
 
of

Code:
If Me.txtWachtwoord.Value =  .Fields("Wachtwoord").Value Then DoCmd.OpenForm "FrmHoofdscherm" & choose(.Fields("Autorisatie").Value,"Beheerder","Rayon","Verkoop","Werknemer")
 
Ik kan de db niet openen (geen 2003) maar je code kan simpeler.

Ik snap je even niet, hoe bedoel je met 2003? Het bestand wat ik gemaakt heb is een 2007-2010 versie (ik heb op de laptop 2010). Ik heb de databases toegevoegd zonder te zippen.

Originele database:
http://www.mijnbestand.nl/Bestand-SUWEGVTRSV3E.accdb

Dit is de aangepaste variant (2e optie van OctaFish):
http://www.mijnbestand.nl/Bestand-6S4VLPZZFYC8.accdb
Op de een of andere wijze krijg ik een foutmelding te zien. De fout zit in de WITH CurrentDb.OpenRecordset (strSQL)


Code:
Option Compare Database
Private intLogonAttempts As Integer
Dim strSQL As String

Private Sub BtnAanmelden_Click()

    strSQL = "SELECT MedId, Wachtwoord, Autorisatie FROM Tbl_Medewerker WHERE [MedId]=" & Me.cboWerknemer.Value
    
    With CurrentDb.OpenRecordset(strSQL)
        MyMedId = .Fields("MedId").Value
        WW = .Fields("Wachtwoord").Value
        MyLevel = .Fields("Autorisatie").Value
        If Me.txtWachtwoord.Value = WW Then
            Select Case MyLevel
                Case 1
                    sForm = "FrmHoofdschermBeheerder"
                Case 2
                    sForm = "FrmHoofdschermRayon"
                Case 3
                    sForm = "FrmHoofdschermInenVerkoop"
                Case 4
                    sForm = "FrmHoofdschermWerknemer"
            End Select
            DoCmd.Close acForm, "AanmeldschermAOB"
            DoCmd.OpenForm sForm
        Else
            MsgBox "Wachtwoord niet valide. Probeert u nogmaals.", vbCritical + vbOKOnly, "Ongeldige invoer!"
            Me.txtWachtwoord.SetFocus
        End If
        .Close
    End With
   
  'Wanneer gebruiker het wachtwoord 3 keer onjuist invoert dan zal de database sluiten
  
     intLogonAttempts = intLogonAttempts + 1
    If intLogonAttempts > 2 Then
      MsgBox "U heeft geen toegang tot de database. Neem contact op met de beheerder.", vbCritical, "Toegang geweigerd!"
      Application.Quit
      
    End If

End Sub

Private Sub BtnVerlaat_Click()
DoCmd.Quit
End Sub
 
Laatst bewerkt:
Ik snap je even niet, hoe bedoel je met 2003? Het bestand wat ik gemaakt heb is een 2007-2010 versie (ik heb op de laptop 2010).
En ik kan op het werk alleen Access 2003 db's openen. Geen 2007/2010. Zo simpel is het :)
Ik heb de db dus verder niet kunnen openen, dus ik heb je tabellen ook niet kunnen bekijken. Mijn code gaat dus uit van de meest logische insteek: Wachtwoord=tekst en Autorisatie=Getal. Als dat anders is, zou er wellicht wat moeten worden veranderd. Op welke regel loopt hij vast (gele regel)?
 
fout 3061 tijdens uitvoering:

Er zijn teweinig parameters. Het verwachte aantal is: 1


de pijl en geel gearceerde lint zit op de navolgende regel:
With CurrentDb.OpenRecordset(strSQL)

Ik had de DIM regel bovenaan toegevoegd. Ligt het daaraan???
 
Geen idee waar je de db's in hebt gemaakt, maar ik kan ze in 2010 niet openen.
 
Hij heeft de extensie, maar zoals gezegd: ik kan 'm niet openen. En dat geldt ook voor je oorspronkelijke zipje, dat is ook niet te openen.
 
Sorry voor het ongemak allemaal. Maar hoe kan ik dit dan oplossen zodat de database wel te openen is?
 
Geen idee; als je de db in een normale versie van Access hebt gemaakt, zou hij zonder meer te openen moeten zijn. Ik neem aan dat je geen exotisch besturingssysteem gebruikt? Of een rare virusscanner die 'm verminkt? Die zou je dan nog tijdelijk even uit kunnen zetten.
 
Code:
Option Compare Database
Private intLogonAttempts As Integer
Dim strSQL As String

Private Sub BtnAanmelden_Click()

'aanmeldvariant van OctaFish

    strSQL = "SELECT [MedId], [Wachtwoord], [Autorisatie niveau] FROM Tbl_Medewerker WHERE [MedId]=" & Me.cboWerknemer.Value
    
    With CurrentDb.OpenRecordset(strSQL)
        MyMedId = .Fields("MedId").Value
        WW = .Fields("Wachtwoord").Value
        MyLevel = .Fields("Autorisatie niveau").Value
        If Me.txtWachtwoord.Value = WW Then
            Select Case MyLevel
                Case 1
                    sForm = "FrmHoofdschermWerknemer"
                Case 2
                    sForm = "FrmHoofdschermRayon"
                Case 3
                    sForm = "FrmHoofdschermInenVerkoop"
                Case 4
                    sForm = "FrmHoofdschermBeheerder"
            End Select
            DoCmd.Close acForm, "AanmeldschermAOB"
            DoCmd.OpenForm sForm
            
        Else
            MsgBox "Wachtwoord niet valide. Probeert u nogmaals.", vbCritical + vbOKOnly, "Ongeldige invoer!"
            Me.txtWachtwoord.SetFocus
        End If
        .Close
        
    End With
   
  'Wanneer gebruiker het wachtwoord 3 keer onjuist invoert dan zal de database sluiten
  
     intLogonAttempts = intLogonAttempts + 1
    If intLogonAttempts > 2 Then
      MsgBox "U heeft geen toegang tot de database. Neem contact op met de beheerder.", vbCritical, "Toegang geweigerd!"
      Application.Quit
      
    End If

End Sub

Private Sub BtnVerlaat_Click()
DoCmd.Quit
End Sub

Met een paar kleine aanpassingen doet de VBA het nu wel miraculeus. SUPER SUPER SUPER bedankt OctaFish!!!!! TOP!

@snb: jouw variant ga ik ook nog eens onder de loep nemen. Niet dat je denkt dat ik je advies niet meeneem. Ook bedankt.
 
Laatst bewerkt:
Nog steeds niet te openen; ik vind de bestandsnamen ook heel erg vreemd. Alsof ze niet goed zijn geupload. Maar het werkt nu, en daar gaat het om. Ik probeerde je een beetje te sturen naar veldnamen zonder spatie, vandaar dat mijn code anders was :)
 
ik wacht nogsteeds op mijnbestand.nl waarom mij het niet lukt. Helaas.
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan