드로우홀릭 더베이직
책 및 웹사이트 통해서 DB를 작성중입니다.
액세스 2013 무작정 따라하기의 로그인 폼은 암호 입력하는 양식이 없어서 외부 웹사이트를 보고 참조해서 해결하였습니다.
문의드리고 싶은 것은 현재 로그인 한 ID 값을 TempVars 명령어를 이용하여 임시변수로 처리하는 방법인데, 책에 나와있는 방법은 제가 구현한 로그인 방식과는 달라서 바로 쓰기는 힘들 것 같습니다.
VBA 코딩은 다음과 같습니다.
=========================================================================
Option Compare Database
Option Explicit
Private Sub CmdCancel_Click()
'로그인 폼 닫기
DoCmd.Close acForm, Me.Name
'액세스 닫기
DoCmd.CloseDatabase
End Sub
Private Sub CmdOk_Click()
' 레코드셋
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("SELECT COUNT(*) AS RESULT FROM T_USER WHERE UserID='" & Me.txtID & "'")
' 해당 아이디가 없을 때
If rs.Fields("RESULT") = 0 Then
Me.lblStatus.Visible = True
Me.lblStatus.Caption = "ID를 확인하여 주세요."
' 레코드셋 닫기
rs.Close
Me.txtID.SetFocus
Exit Sub
End If
Me.lblStatus.Visible = False
Set rs = CurrentDb.OpenRecordset("SELECT UserPW FROM T_USER WHERE UserID='" & Me.txtID & "'")
' 암호가 일치하지 않을 때
If "" & rs.Fields("UserPW").Value <> "" & Me.txtPW Then
Me.lblStatus.Visible = True
Me.lblStatus.Caption = "암호를 확인하여 주세요."
' 레코드셋 닫기
rs.Close
Me.txtPW.SetFocus
Exit Sub
End If
Me.lblStatus.Visible = False
' 레코드셋 닫기
rs.Close
' 로그인 폼 닫기
DoCmd.Close acForm, Me.Name
End Sub
====================================================================================
로그인에 사용한 table(T_USER)은 다음과 같습니다.
UserID | 짧은 텍스트 |
UserPW | 짧은 텍스트 |
UserName | 짧은 텍스트 |
UserMail | 짧은 텍스트 |
UserClass | 짧은 텍스트 |
1. 로그인에 사용되는 정보는 UserID, UserPW이며, UserName을 임시 변수로 처리하여 작성자 및 작성일시에 대한 매크로를 만드려고 합니다. VBA에서 SetTempVars 명령어를 실행하는 방법과, 실행시 UserName을 임시 변수로 설정할 수 있는지 여부에 대해 문의드리고 싶습니다.
엮인글 '1'
https://www.td21.com/index.php?mid=qna&document_srl=13826&act=trackback&key=21a
blocked drains oxford - oxford-drains.co.uk
TeamData21 : TD21 - 액세스 임시 변수 설정 관련 문의드립니다.
안녕하세요.
위의 그림처럼 임시 변수 할당을 해 주시면 됩니다.
변수할당: TempVars!변수명 = 할당할 값
변수값 가져오기: TempVars!변수명
UserName을 임시 변수로 처리하려고 할 때는 위 방식을 사용하여 사용하시면 됩니다.
다른 방법은 '모듈 수준 변수'를 사용하는 것입니다.
위 코드를 보시면 gstrUserName 에 값을 할당하는 코드가 있지요?
아래 그림처럼 모듈 하나 추가한 후 거기에 변수를 public으로 선언하면 됩니다.
(폼에 선언하면 안됩니다. 모듈에 선언해야 다른 폼들에서 불러다 쓸 수 있습니다.)
아래는 다른 폼에서 아까 할당한 변수 gstrUserName을 불러 오는 코드입니다.
추가로.... 레코드셋에서 데이터 추출하실 때 OpenRecordset을 사용하시네요.
조금 더 편하게 호출 할 수 있습니다.
DLookup 함수를 사용하는 것입니다.
DLookup("데이터를 가져올 필드명", "테이블명", "조건")
주의할 점은 DLookup 함수에서 조건에 맞는 값이 없을 때 null을 반환하기 때문에 아래 식처럼 구현하면 오류가 발생 할 수 있습니다.
그래서 null 값을 원하는 값으로 치환해주는 nz 함수를 같이 사용합니다.
이 뜻은 DLookup 함수를 통해 값이 나오면 그 값을, null이면 "NoUser"를 반환하게 됩니다.
strUserID의 값이 "NoUser"가 나오면 해당 UserID는 없다는 뜻이 되겠지요?
이상입니다.