2016-04-11 10 views
1

Ich erstelle ein Login für Access mit VBA.Microsoft Access; Fehler 94: Ungültige Verwendung von Null

Alles funktioniert, bis der eingegebene Benutzername (auf dem Login-Formular) falsch geschrieben ist. Wenn falsch geschrieben, bekomme ich "Fehler 94; Ungültige Verwendung von Null". Im Folgenden ist mein Code (bis zu, wo der Fehler ist)

Private Sub Command1_Click() 

Dim user As String 
Dim userlevel As Integer 
Dim TempPass As String 
Dim ID As Integer 
Dim UserName As String 
Dim TempLoginID As String 
Dim password As String 
Dim testcomp As Integer 

If IsNull(Me.txtUserName) Then 
    MsgBox "Please enter LoginID", vbInformation, "LoginID Required" 
    Me.txtUserName.SetFocus 
ElseIf IsNull(Me.txtPassword) Then 
    MsgBox "Please enter Password", vbInformation, "Password Required" 
    Me.txtPassword.SetFocus 
Else 
    If testcomp = StrComp(Me.txtPassword.Value, (DLookup("[Password]", "tblUser", "[Userlogin]= '" & Me.txtUserName.Value & "'")), vbBinaryCompare) = 0 Then 
    MsgBox "Incorrect LoginID or Password" & vbNewLine & "Please contact an administrator for login information", vbInformation, "Password Required" 
    Else 
     TempLoginID = Me.txtUserName.Value 
    UserName = Nz(DLookup("[UserLogin]", "tblUser", "[UserLogin] = '" & Me.txtUserName.Value & "'"), "") 
    userlevel = Nz(DLookup("UserSecurity", "tblUser", "UserLogin = '" & Me.txtUserName.Value & "'"), "") 
    TempPass = Nz(DLookup("[Password]", "tblUser", "[UserLogin] = '" & Me.txtUserName.Value & "'"), "") 
    ID = Nz(DLookup("[UserID]", "tblUser", "[UserLogin] = '" & Me.txtUserName.Value & "'"), "") 
    DoCmd.Close 
    If (TempPass = "Password") Then 
     MsgBox "Please change password", vbInformation, "New password required" 
     DoCmd.OpenForm "pwdupdate_frm", , , "[UserID] = " & ID 

     Else 

Die Debug nimmt mich auf die Linie:

UserName = Nz(DLookup("[UserLogin]", "tblUser", "[UserLogin] = '" & Me.txtUserName.Value & "'"),"") 

Was bin ich?

Vielen Dank für jede Hilfe!

Antwort

1

Um zu schlechten Kriterien zu kommen, gibt Dlookup einen Null-Wert zurück, den Sie unter UserName signieren. Versuchen Sie setzen die Funktion in Nz() Funktion:

UserName = Nz(DLookup("[UserLogin]", "tblUser", "[UserLogin] = '" & Me.txtUserName.Value & "'"),"") 

Auf diese Weise erhält Username eine leere Zeichenfolge, nicht ein Nullwert. Eigentlich ist es für alle DLookup s und Form-Steuerelemente empfohlen.

+0

Das löste den 'Fehler 94' nur jetzt ich erhalte 'Fehler 13; type mismatch 'im Bereich userlevel = Nz(). Ich bin ein Anfänger bei diesem und versuche, mich selbst zu unterrichten, also bitte entschuldigen Sie mein schlechtes Wissen (und danke für die Hilfe bis jetzt) ​​ – MK08

+0

[Nz gibt einen anderen Wert, wenn Null] (https://msdn.microsoft.com/ en-us/library/aa172237 (v = Büro.11) .aspx). * userlevel * ist eine Ganzzahl, Sie können ihm keinen Zeichenfolgenwert unterschreiben. Sehen Sie, ob Sie einen Int-Wert verwenden können, der Null anzeigt, vielleicht eine 0 oder -1: Nz (DLookup (...), -1) – marlan

+0

Ich habe gerade Ihre Antwort gesehen, nachdem ich es mit etwas Recherche herausgefunden habe. Ich bin nicht 100% sicher, was die Nz() Funktion tut/wie es funktioniert..aber es funktioniert! (Siehe meine Antwort unten und danke nochmals für die Hilfe!) – MK08

0

Ich glaube, ich habe es herausgefunden. Buchung für den Fall, dass jemand in Zukunft ähnliche Probleme hat. Ich habe herausgefunden, dass die Nz() - Funktion (wenn in einer Integer-Variablen) auf den Wert eingestellt werden muss, den sie nachschlägt.

Zum Beispiel hatte ich

userlevel = Nz(DLookup("UserSecurity", "tblUser", "UserLogin = '" & Me.txtUserName.Value & "'"), "") 

Wenn in Wirklichkeit es sollte:

userlevel = Nz(DLookup("UserSecurity", "tblUser", "UserLogin = '" & Me.txtUserName.Value & "'"), "1, 2, 3") 

Weil ich drei Zugriffsebenen (1; Admin 2; Benutzer 3; Gast)

Das gleiche gilt für die Linie

ID = Nz(DLookup("[UserID]", "tblUser", "[UserLogin] = '" & Me.txtUserName.Value & "'"), "") 

braucht

), 0) instead of), "") 

haben, weil es eine ganze Zahl und nicht eine Zeichenfolge ist.

Vielen Dank für die Hilfe und wenn jemand interessiert ist, mehr darüber zu erarbeiten oder mich zu korrigieren, wo ich falsch liege, bitte fühlen Sie sich frei!

Verwandte Themen