สอบถามการกำหนดสิทธิ ในการกดปุ่ม command Button หรือสิทธิในการเข้าถึงฟอร์ม



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

25 ม.ค. 61 , 11:46:15
อ่าน 1296 ครั้ง

prajak

รบกวนด้วยครับ ผมสร้างฟอร์มlogin เพื่อกำหนดสิทธิของพนักงานแต่ละคนในการเข้าถึงฟอร์มโดยที่ไม่สามารถกดปุ่ม command button  ซึ่งจะเป็นการเชื่อมโยงไปยังฟอร์มอื่นได้ โดยรบกวนสอบถามดังนี้ครับ
1.ถ้าใส่ user name และ password ไม่ถูกให้มีข้อความแจ้งว่า "User Name หรือ Password ไม่ถูกต้อง" แล้ว ล้างข้อมูลในช่อง user name และ password
2.ถ้า login เข้าได้แล้ว ในหน้า Main Form ให้ User ที่มี level =2( ตามตาราง) ไม่สามารถกดปุ่ม การตลาด ได้เป็นต้น

ขอบคุณครับ





« แก้ไขครั้งสุดท้าย: 26 ม.ค. 61 , 08:30:55 โดย prajak »

 

26 ม.ค. 61 , 10:03:27
ตอบกลับ #1

OddyWriter

ก่อนอื่นต้องทำการสรุปก่อนนะครับว่าสิทธิในการใช้งานของพนักงานแต่ละคนนั้นสรุปแล้วมีกี่รูปแบบ ถ้าพนักงาน 100 คนมี 100 รูปแบบ อย่างนี้ไม่สนุกแน่นอน

แต่ถ้ามี 4-5 รูปแบบอย่างนี้สามารถเขียนโค้ดได้ครับ วิธีการง่ายที่สุดคือใช้ Select Case

ถ้าไม่ต้องการให้เข้าปุ่มไหนได้ ก็สั่งให้ Enabled = false

ตัวอย่างคำสั่ง ดูในกระทู้นี้ครับ
https://www.thai-access.com/index.php?topic=118.msg287
กินร้อน ช้อนตัวเอง จานใครจานมัน ออกนอกบ้านใส่หน้ากากอนามัยหรือหน้ากากผ้า
 

26 ม.ค. 61 , 10:44:26
ตอบกลับ #2

prajak

รบกวนขอตัวอย่างสักนิดได้ไหมครับ ว่าต้องเอาคำสั่งไปวางไว้ตรงไหน อ้างอิงตามข้อมูลของผมครับ พอดีทำไม่เป็นครับ

 

26 ม.ค. 61 , 12:03:20
ตอบกลับ #3

OddyWriter

วางไว้ในปุ่มเข้าสู่ระบบครับ

เอาไว้ใน if block ครับ

ถ้า case 1 ก็ให้ disable manager
ถ้า case 2 ก็ให้ disable การตลาด
กินร้อน ช้อนตัวเอง จานใครจานมัน ออกนอกบ้านใส่หน้ากากอนามัยหรือหน้ากากผ้า
 

26 ม.ค. 61 , 16:34:03
ตอบกลับ #4

pizza_p

สร้าง Module ขึ้นมา ตั้งชืออะไรก็ได้แล้วแต่ชอบ ใส่ code ประมาณนี้ลงไป เพื่อเก็บค่า Level ไว้ใช้ในภายหลัง

Static UserLevel As String

Public Sub SetUserLevel(Level As String)
    UserLevel = Level
End Sub

Public Function GetUserLevel() As String
    GetUserLevel = UserLevel
End Function
--------------------------------------
ที่ปุ่ม login บนฟอร์ม FormLogin ให้เพิ่มคำสั่งลงไป
Private Sub login_Click()
Dim fpass As String
Dim flevel As String

fpass = DlookUp("[Password]","UserLogin","[UserName]='" & Me.UserBox & "'")

   If fpass = Me.PassBox Then
      flevel = DlookUp("[Level]","UserLogin","[UserName]='" & Me.UserBox & "'")
      SetUserLevel flevel
      DoCmd.OpenForm "Main Form", acNormal
   End If
End Sub
--------------------------------------
ใน Main Form ถ้าจะให้แสดงปุ่มใด ไม่แสดงปุ่มใด ให้ไปใส่คำสั่งไว้ที่ Open event เช่น
Private Sub Form_Open(Cancel As Integer)
Dim flevel as String

flevel = GetUserLevel()

   Select Case flevel
   Case "2"
      Me.การตลาด.Enabled = False
   Case "4"
      Me.Manager.Enabled = False
   End Select

End Sub

ฟอร์มอื่นๆ ก็เช่นกัน ก่อนเปิดฟอร์มก็ให้เช็คค่า User level จากฟังก์ชั่น GetUserLevel() ได้เลย แล้วจะเปิดปิดปุ่มหรือคอนโทรลใดๆก็ได้ตามชอบ

 

26 ม.ค. 61 , 16:52:52
ตอบกลับ #5

prajak

ขอบคุณครับ เดี๋ยวผมจะลองดูนะครับ ได้เรื่องยังไงเดี๋ยวมารายงานครับ

 

27 ม.ค. 61 , 11:06:01
ตอบกลับ #6

prajak

ลองแล้วerrorตอนเปิดโปรแกรมครับ error code ตรง Module


อันนี้เป็น code ที่ใส่ที่ปุ่ม login บนฟอร์ม FormLogin


อันนี้เป็น code ที่ใส่ไว้ใน on open ของ Main Form


ไม่ทราบว่าผิดตรงไหนอะครับ



 

27 ม.ค. 61 , 11:11:14
ตอบกลับ #7

pizza_p

โทษทีไม่ได้ทดสอบ
Static UserLevel as String ให้เปลียนเป็น Dim UserLevel as String

 

27 ม.ค. 61 , 12:50:27
ตอบกลับ #8

prajak

ได้แล้วครับ ขอบคุณมากๆเลยครับ


 

27 ม.ค. 61 , 13:04:42
ตอบกลับ #9

prajak

รบกวนอีกทีนะครับ codeในการ login ถ้า user name หรือ password ไม่ถูกต้อง ให้มันแจ้งเตือนพร้อมทั้งล้างค่าใน text ที่กรอกไปแล้ว ต้องทำยังไงครับ


 

27 ม.ค. 61 , 13:56:43
ตอบกลับ #10

pizza_p

Private Sub login_Click()
Dim fpass As String
Dim flevel As String

fpass = DlookUp("[Password]","UserLogin","[UserName]='" & Me.UserBox & "'")

   If fpass = Me.PassBox Then
      flevel = DlookUp("[Level]","UserLogin","[UserName]='" & Me.UserBox & "'")
      SetUserLevel flevel
      DoCmd.OpenForm "Main Form", acNormal
   Else
      MsgBox "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง", vbCritical, "พบข้อผิดพลาด"
      Me.Undo
      Me.UserBox.SetFocus

   End If

End Sub
« แก้ไขครั้งสุดท้าย: 27 ม.ค. 61 , 13:59:28 โดย pizza_p »

 

27 ม.ค. 61 , 15:25:55
ตอบกลับ #11

prajak

Private Sub login_Click()
Dim fpass As String
Dim flevel As String

fpass = DlookUp("[Password]","UserLogin","[UserName]='" & Me.UserBox & "'")

   If fpass = Me.PassBox Then
      flevel = DlookUp("[Level]","UserLogin","[UserName]='" & Me.UserBox & "'")
      SetUserLevel flevel
      DoCmd.OpenForm "Main Form", acNormal
   Else
      MsgBox "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง", vbCritical, "พบข้อผิดพลาด"
      Me.Undo
      Me.UserBox.SetFocus

   End If

End Sub
กรณีถ้าใส่ User name ถูกต้อง แต่ใส่ password ผิด โปรแกรมทำงานตามคำสั่งปกติครับ แต่ถ้าใส่ User Name ผิด โปรแกรมจะ error ครับ ต้องเพิ่ม code อีกหรือเปล่าครับ

 

27 ม.ค. 61 , 16:36:37
ตอบกลับ #12

OddyWriter

เปลียนช่องใส่ User Name เป็น Combobox ครับ แล้วกำหนดว่าเพิ่มข้อมูลไม่ได้ก็พอครับ
กินร้อน ช้อนตัวเอง จานใครจานมัน ออกนอกบ้านใส่หน้ากากอนามัยหรือหน้ากากผ้า
 

27 ม.ค. 61 , 19:43:06
ตอบกลับ #13

pizza_p

Private Sub login_Click()
Dim fpass As String, fusername As String, flevel As String

fusername = Nz(DlookUp("[UserName]","UserLogin","[UserName]='" & Me.UserBox & "'"))
If fusername = "" Then
    MsgBox "ชื่อผู้ใช้ไม่ถูกต้อง", vbCritical, "ไม่พบรายชื่อผู้ใช้งาน"
    Me.Undo
    Me.UserBox.SetFocus
Else
    fpass = Nz(DlookUp("[Password]","UserLogin","[UserName]='" & Me.UserBox & "'"))
       If fpass = Me.PassBox Then
          flevel = DlookUp("[Level]","UserLogin","[UserName]='" & Me.UserBox & "'")
          SetUserLevel flevel
          DoCmd.OpenForm "Main Form", acNormal
       Else
          MsgBox "รหัสผ่านไม่ถูกต้อง", vbCritical, "พบข้อผิดพลาด"
          Me.Undo
          Me.UserBox.SetFocus
   End If
End If

End Sub

 

29 ม.ค. 61 , 08:26:34
ตอบกลับ #14

prajak

เปลียนช่องใส่ User Name เป็น Combobox ครับ แล้วกำหนดว่าเพิ่มข้อมูลไม่ได้ก็พอครับ
ขอบคุณมากนะครับ

 

29 ม.ค. 61 , 08:28:25
ตอบกลับ #15

prajak

Private Sub login_Click()
Dim fpass As String, fusername As String, flevel As String

fusername = Nz(DlookUp("[UserName]","UserLogin","[UserName]='" & Me.UserBox & "'"))
If fusername = "" Then
    MsgBox "ชื่อผู้ใช้ไม่ถูกต้อง", vbCritical, "ไม่พบรายชื่อผู้ใช้งาน"
    Me.Undo
    Me.UserBox.SetFocus
Else
    fpass = Nz(DlookUp("[Password]","UserLogin","[UserName]='" & Me.UserBox & "'"))
       If fpass = Me.PassBox Then
          flevel = DlookUp("[Level]","UserLogin","[UserName]='" & Me.UserBox & "'")
          SetUserLevel flevel
          DoCmd.OpenForm "Main Form", acNormal
       Else
          MsgBox "รหัสผ่านไม่ถูกต้อง", vbCritical, "พบข้อผิดพลาด"
          Me.Undo
          Me.UserBox.SetFocus
   End If
End If

End Sub
ทำตามที่แนะนำแล้วครับ ใช้ได้เลยครับ ขอบคุณมากๆเลยนะครับ นิดนึงนะครับหากต้องการให้มันจำ username และรหัสผ่าน สามารถทำได้หรือเปล่าครับ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย