Zeer simpele login. [Zonder VBA]?

Status
Niet open voor verdere reacties.

kevinr1

Gebruiker
Lid geworden
7 okt 2010
Berichten
110
Hallo allemaal,

Probeer in Access 2010 een login scherm te maken.

Heb een formulier gemaakt met de naam: Login
asdf.png

Een tabel met de naam: Medewerkers
Met daarin de velden:

Gebruiker en Wachtwoord

Gebruiker is de Primaire key.

Hoe zorg ik dat als je 'de juiste' gebruikersnaam en wachtwoord intypt dat je dan naar het formulier: "XY" gaat?

Meer hoeft er niet te gebeuren. ( heb half google al afgezocht en youtube filmpjes lopen kijken, alleen daar gebruiken ze zeer vaage VBA code's die ik niet begrijp. Ik wil het wel snappen... Alleen ik snap het niet :o.
 
Inlogschermen zijn niet het meest makkelijke om mee te beginnen. Je hebt namelijk afhankelijkheden die gecontroleerd moeten worden. En daar heb je nu eenmaal VBA (kennis) voor nodig. Je kunt het wel zonder VBA doen overigens, maar dan heb je ook geen wachtwoord nodig. Je maakt dan voor elke persoon een eigen formulier (met de gegevens die ze mogen zien) en met behulp van een keuzelijst op het formulier kies je de persoon. Maar dat is niet overdreven veilig ;) Wat weerhoudt Piet er van om het formulier van Klaas te openen? Juist, helemaal niets... Dus toch maar een VBA voorbeeldje ophalen (er zijn er ondertussen genoeg op het forum).

Of niet proberen een open hart operatie te doen omdat je een biefstukje kunt snijden :)
 
Probeer nu dus met VBA codes te werken zoals jij hebt aangegeven.

M'n tabel heet: Medewerkers
Met daarin 2 tabellen: Gebruikers en die ander Wachtwoord ( Zie hierboven )

Heb m'n Login knop:
cmdLogin genoemd.

Gebruiker - > txtUser
Wachtwoord - > txtPassword

Heb diverse VBA codes gekopieerd en aangepast maar het lukt gewoon niet, Access blijft komen met foutmeldingen.
 
Laatst bewerkt:
Om te weten wat je fout doet, moeten we eigenlijk de code zien; op basis van de huidige info kunnen we weinig zien... En geef ook aan wat de foutmeldingen zijn. Helpt ook! Een opmerking als: Access blijft komen met foutmeldingen zeg helemaal niks.
Als je de code plakt, maak 'm dan wel op met de CODE knop (knop met #), dan is hij een stuk leesbaarder...
 
Code:
Option Compare Database

Private Sub Command82_Click()

Private Sub txtUser_AfterUpdate()
'After selecting user name set focus to password field
    Me.txtPassword.SetFocus
End Sub


Private Sub cmdLogin_Click()

'Check to see if data is entered into the UserName combo box

    If IsNull(Me.txtUser) Or Me.txtUser = "" Then
      MsgBox "Voer een gebruikersnaam in.", vbOKOnly, "Required Data"
        Me.txtUser.SetFocus
        Exit Sub
    End If

    'Check to see if data is entered into the password box

    If IsNull(Me.txtPassword) Or Me.txtPassword = "" Then
      MsgBox "Voer een wachtwoord in.", vbOKOnly, "Required Data"
        Me.txtPassword.SetFocus
        Exit Sub
    End If

    'Check value of password in tblEmployees to see if this
    'matches value chosen in combo box

If Me.txtPassword.Value = DLookup("txtPassword", "Medewerkers", _
            "[txtUser]=" & Me.txtUser.Value) Then

        lngMyEmpID = Me.txtUser.Value

        'Close logon form and open splash screen

        DoCmd.Close acForm, "frmLogon", acSaveNo
        DoCmd.OpenForm "frmSplash_Screen"

    Else
      MsgBox "Ongeldig wachtwoord, herstel.", vbOKOnly, _
            "Invalid Entry!"
        Me.txtPassword.SetFocus
    End If




    'If User Enters incorrect password 3 times database will shutdown

    intLogonAttempts = intLogonAttempts + 1
    If intLogonAttempts > 3 Then
      MsgBox "You do not have access to this database.Please contact admin.", _
               vbCritical, "Restricted Access!"
        Application.Quit
    End If

End Sub

Geeft fout: "Run time error 2471, The expression you entered as a query paramater produced this error:
'sasdfsasdf'
Maar dat is juist de inloggebruikersnaam die ik heb ingevoerd. Die geeft ie nu de hele tijd als foutcode als ik op login druk.


Originele code hiervandaag gehaald:
HIERO
 
Laatst bewerkt:
Als ik even naar het begin kijk, dan gaat het al gelijk fout:

Code:
Option Compare Database

Private Sub Command82_Click()
[B][COLOR="red"]End Sub[/COLOR][/B]
Private Sub txtUser_AfterUpdate()

Er ontbreekt bij een opdracht een End Sub, zoals je ziet. Elke procudure die met Sub of Function begint, moet een End Sub of End Function hebben.
 
Oke, die verwijderd. Maar zorgt niet dat de foutmelding weggaat. Zelfde foutcode blijft :confused:
 
Laatst bewerkt:
Da's een prima (en goed werkend) voorbeeld; daar ligt het dus niet aan... Kijk je naar de foutmelding:
"Run time error 2471, The expression you entered as a query paramater produced this error: 'sasdfsasdf'
Dan zoek je dus de waarde 'sasdfsasdf' op in de tabel [Medewerkers]. En dat doe je met: "[lngEmpID]=" & Me.txtUser.Value. In het voorbeeld is het veld [lngEmpID] een numeriek veld (waarden 1,2,3 etc). Je kunt een numeriek veld niet vergelijken met een tekstveld. Als je het voorbeeld letterlijk hebt nagemaakt, dan is bij jou het veld [lngEmpID] ook numeriek. Dat kun je dan dus niet gebruiken. Dit zou nog wel kunnen werken:

Code:
    If Me.txtPassword.Value = DLookup("strEmpPassword", "Medewerkers", "[strEmpPName]='" & Me.txtUser.Value) & "'" Then

Zoals je ziet, heb ik het criterium aangepast; de DLOOKUP zoekt nu niet meer op het veld [lngEmpID], maar op het veld [strEmpPName] (ik ga er nog steeds van uit dat je de veldnamen letterlijk hebt overgenomen...)
Ook is het criterium een beetje aangepast, omdat je zoeken op Tekst een andere aanpak vergt dan zoeken op een getal.

De reden dat jouw formulier (vermoed ik althans) niet letterlijk over te nemen is, komt doordat in het voorbeeld gebruik gemaakt wordt van een Keuzelijst om de Usernaam op te halen. En dan krijg je automatisch het veld [lngEmpID] terug als waarde van die keuzelijst. Jij maakt zo te zien gebruik van een Tekstvak (leid ik af uit de naam Me.txtUser). Een keuzelijst zou je namelijk cboUser hebben genoemd. Toch?

Kijk eens of je met de aanpassing uit de voeten kunt, of zet een Keuzelijst op het formulier, die het veld [lngEmpID] als eerste veld (Afhankelijke kolom) heeft.
 
Ik gebruik idd geen ID's. ( of nummers of een dropbox keuzelijst ).
Alleen invoer.

Heb je code gekopieerd:
Code:
 If Me.txtPassword.Value = DLookup("strEmpPassword", "Medewerkers", "[[b]txtUser[/b]]='" & Me.txtUser.Value) & "'" Then

Nu geeft ie een runtime error 3075 aan.
Syntax error in string query expression 'txtUser' = asdfasdf.

"Waarbij asdfasfd weer m'n invoernaam is '
 
Hoe heb je het veld met de medewerkersnamen genoemd in je tabel? Want txtUser is neem ik aan de naam van het tekstveld op je formulier; ik zou in de tabel eerder iets als [User] of [Naam] verwachten.
 
Gebruik de juiste namen voor de velden!

Een tabel met de naam: Medewerkers
Met daarin de velden:

Gebruiker en Wachtwoord


Code:
 Private Sub cmdLogin_Click()
'hier nog controle op juiste invoer

'controleer het wachtwoord
   If Me!txtPassword = DLookup("wachtwoord", "medewerkers", "gebruiker='" & Me!txtUser & "'") Then
        MsgBox "OK"
    Else
        MsgBox "niet juist!"
    End If
End Sub
txtPassword en txtUser zijn de namen van de velden op het inlogformulier
 
Laatst bewerkt:
De invoer van de velden weet ik dus niet. ( Waar je precies wat moet invoeren. )
Nu heb ik dit:

Code:
 Private Sub txtUser_AfterUpdate()
'After selecting user name set focus to password field
    Me.txtPassword.SetFocus
End Sub


Private Sub cmdLogin_Click()

'Check to see if data is entered into the UserName combo box

    If IsNull(Me.txtUser) Or Me.txtUser = "" Then
      MsgBox "Voer een gebruikersnaam in.", vbOKOnly, "Required Data"
        Me.txtUser.SetFocus
        Exit Sub
    End If

    'Check to see if data is entered into the password box

    If IsNull(Me.txtPassword) Or Me.txtPassword = "" Then
      MsgBox "Voer een wachtwoord in.", vbOKOnly, "Required Data"
        Me.txtPassword.SetFocus
        Exit Sub
    End If

    'Check value of password in tblEmployees to see if this
    'matches value chosen in combo box

   If Me!txtPassword = DLookup("wachtwoord", "medewerkers", "gebruiker='" & Me!txtUser & "'") Then
        MsgBox "OK"
        
   Else
        MsgBox "niet juist!"
   End If

End Sub

Hij werkt nu wel.
Alleen moet ie na de 'gelukt' het login formulier sluiten en het formulier 'XYZ' openen.
Thx! ( als er een 'bedankt ' knopje was hadden jullie +1 gekregen:P!

Zeer bedankt.
 
Laatst bewerkt:
Dan krijg je zoiets:

Code:
  If Me!txtPassword = DLookup("wachtwoord", "medewerkers", "gebruiker='" & Me!txtUser & "'") Then
        DoCmd.Close acForm, Me.Form.Name
        DoCmd.OpenForm "XYZ", acNormal
   Else
        MsgBox "niet juist!"
   End If
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan