2017-11-09 4 views
0

현재 작업중인 Access 데이터베이스의 로그인 시스템 코드를 작성하려고하는데이 오류를 제외하고 모든 것이 원활하게 실행되고 있습니다. 내가 잘 작동 내가 만든 로그인 폼으로 로그인 세부 정보를 넣어 후 나는 널의Null 액세스 VBA의 사용이 잘못되었습니다.

오류를

잘못된 사용을 얻고있다. 문제는 사용자에게 읽기 권한 만있는 경우 양식을 볼 수 있도록 "읽기 전용"으로 제한해야하는 코드에 있습니다. 나는이 문제를 조사해 보았는데, VBA가 NULL 값을 가진 필드에서 정수를 읽으려고 시도했기 때문에 오류가 발생한 것 같지만 VBA는 오류가있는 곳을 정확히 알려주지 않는다. 선.

누군가가 내 오류가 어디 있는지 지적 할 수 있도록 실제 탐색 양식에 대한 코드를 게시하고 있습니다.이를 수정하기 위해 설정할 수 있습니다. 이것이 내 로그인 시스템의 유일한 문제입니다. 문제가 실제로 어디에서 발생했는지 식별 할 수 있기 때문에 필요한 변경을 구현할 수 있습니다. 실제 Userlevel 값의 출처를 확인하는 데 문제가 있습니다.

Option Compare Database 
Option Explicit 

Private Sub Form_Load() 

Dim UserLogin As String 

Dim UserLevel As Integer 

UserLogin = Environ("UserName") 
Me.TxtLogin = UserLogin 
UserLevel = DLookup("[UserType]", "TblUser", "[UserLogin] = '" & Me.TxtLogin 
& "'") 
If UserLevel = 3 Then 
    Me.AllowAdditions = False 
    Me.AllowDeletions = False 
    Me.AllowEdits = False 
End If 
End Sub 
+0

당신이 대신에 유저 레벨 = 3''쓰기 시도 할 수 있습니다 ->'유저 레벨 =을 DLookup ("[UserType을]", "TblUser", "[하고 UserLogin] = '"& Me.TxtLogin & " ' ")'그리고 여전히 오류가 있는지 확인하십시오. – Vityata

답변

3

오류가 발생한 위치를 언급하지 않았습니다. 나는 그것이 라인

UserLevel = DLookup("[UserType]", "TblUser", "[UserLogin] = '" & Me.TxtLogin & "'") 

당신은 Dim UserLevel as VariantDlookup 이후 Null를 반환 할 수 있어야에 가정하자.

또는, UserLevel as Integer을 남길 수 있습니다 및 사용

UserLevel = Nz(DLookup("[UserType]", "TblUser", "[UserLogin] = " & Me.TxtLogin & "'"),0) 

가 0

+0

도움을 주셔서 감사합니다! 첫 번째 옵션이 작동했지만 지금은 Priviledge 코드가 작동하지 않는 것 같습니다. 나는 아마 뭔가를 놓친 것 같아요, 하위 폼을 넣을 필요가 있습니다. –

0

사용에 널 (null)을 탈출하는 NZ() 기능을 가능한 Null을 켭니다.

Nz(Value, ValueIfNull) 

UserLevel = DLookup("[UserType]", "TblUser", "[UserLogin] = '" & NZ(Me.TxtLogin,"") & "'") 

참조 : Application.Nz Method (Access)

@PatrickHonorez 좋은 점을 제공합니다. 그러나 NZ 함수를 사용하여 DLookup을 래핑 할 수도 있습니다.

UserLevel = NZ(DLookup("[UserType]", "TblUser", "[UserLogin] = '" & NZ(Me.TxtLogin,"") & "'"),"") 
+0

@Vityata'DLookup'은'UserLogin' 필드 값을 작은 따옴표로 묶었습니다. 'UserLogin'이 숫자 필드라면 작은 따옴표로 인해 에러가 발생합니다. 숫자 필드의 경우'NZ (Me.TxtLoginID, 0)'을 사용하십시오. –