เก็บ Log User ที่ล็อกอินเข้าใช้งาน Access
กระทู้เก่าบอร์ด อ.Yeadram

 7,851   11
URL.หัวข้อ / URL
เก็บ Log User ที่ล็อกอินเข้าใช้งาน Access

อยากทราบวิธีการเก็บ Log User ที่ล็อกอินเข้าใช้งาน Access ทำอย่างไรครับ
คือตอนนี้ผมให้ทำ ระบบ Login เข้าใช้งานของ User เสร็จแล้ว โดยเก็บข้อมูลของ User ไว้ใน ตาราง Userlogon มี Fields Username และ Fields Password
แต่อยากทราบว่า User คนไหนเข้ามาใช้โปรแกรม วันที่/เวลาเท่าไร พอมีตัวอย่างและวิธีการทำอย่างไรบ้างครับ

ขอขอบคุณไว้ ณ โอกาสนี้ด้วย

11 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R15248
วิธีที่ผมทำนะครับ
ผมจะ Login แล้วส่ง Username และ Password
ไปค้างไว้ที่ฟอร์มหนึ่ง ตอน Openform ก็ Hidden ไว้
แล้วค่อยเปิด เมนูหลัก เวลาใช้ ก็อ้างอิงถึงครับ

ตอบเป็นแนวทางครับ
2 @R15250
คุณสามารถเขียนต่อจากคำสั่งสั่งที่คุณตรวจสอบ Username, Password ผ่านแล้ว ก็อาจใช้การกำหนด Recordset เขียนลงในตารางที่ต้องการได้เลยครับ เช่น อยากเก็บไว้ในตารางชื่อ Table1 ฟิลด์ชื่อ Login_name, Login_Date ตามที่บอก ก็เขียนประมาณนี้ครับ

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("Table1", dbOpenDynaset)
    rs.AddNew
    rs!Login_name = "ชื่อผู้ใช้" ' คุณจะอ้างถึงชื่อคอนโทรลที่ให้ผู้ใช้พิมพ์ Username ก็ได้
    rs!Login_Date = Now() 'บันทึกทั้ง วันที่ และเวลาปัจจุบัน
    rs.Update
    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing

ประมาณนี้ครับ ปรับใช้ดู
3 @R15252
ขอบพระคุณมากครับผม

       ขอถามอีกนิดครับ แล้วถ้าผมต้องการกำหนด Permission ให้ User แต่ละคนล่ะครับ ประมาณว่า User คนนี้สามารถดูได้อย่างเดียว , Userท่านนี้สามารถลบ เพิ่ม แก้ไข และ User ท่านนี้สามารถดูไฟล์นี้ได้ แต่ดูไฟล์นี้ไม่ได้ ประมาณนี้ สามารถ กำหนดได้ไหมครับ
        ตอนนี้ผมทำโปรแกรมเก็บเอกสาร ซึ่งเก็บเป็นไฟล์ Pdf น่ะครับ มันต้องกำหนดว่า แผนกไหน ดูเอกสารตัวไหนได้บ้าง   พอมีตัวอย่างหรือแนวทางหรือเปล่าครับ
4 @R15261
อื่ม! มันเป็นเรื่องของเงื่อนไขล้วนๆอ่ะครับ รายละเอียดมันยิบย่อยมาก แล้วแต่ความต้องการและข้อมูลการออกแบบ อธิบายเป็นแนวคิดพอนะครับ ประมาณว่าในตาราง Userlogon คุณก็อาจสร้างชื่อกลุ่มอีกซักฟิลด์ไว้เก็บค่า Permissions ของแต่ละ user เช่น Admin, User, Guest อะไรประมาณนี้ จากนั้นเมื่อเวลาใส่รหัสเปิดฟอร์มผ่านแล้ว คุณก็ใช้คำสั่งตรวจสอบอีกทีว่า ชื่อที่ใช้อยู่ในกลุ่มไหน เช่น หากเป็น Admin ก็ใช้คำสั่งเปิดแบบ
DoCmd.OpenForm "Form1", acNormal
แต่หากเป็น Guest ก็ใช้คำสั่งเปิดฟอร์มแบบดูได้อย่างเดียว
DoCmd.OpenForm "Form1", acNormal, , , acFormReadOnly

โดยคุณอาจใช้คำสั่งประเภท Select Case ในการแบ่งกลุ่ม Permission เช่น
Dim TTT As String
TTT = DLookup("Permissions", "Userlogon", "Username = 'ชื่อที่เข้าใช้'")
Select Case TTT
Case "Admin"
    DoCmd.OpenForm "Form15", acNormal
    ...
Case "User"
    DoCmd.OpenForm "Form15", acNormal
    ...
Case "Guest"
    DoCmd.OpenForm "Form1", acNormal, , , acFormReadOnly
    ...
End Select

รวมถึงการเปิดไฟล์ PDF ก็ลักษณะเป็นเรื่องของการตรวจสอบและเงื่อนไขเหมือนกัน ว่าถ้าตรงเงื่อนไขไหนให้ทำอะไร ประมาณนี้แล้วกันนะครับ หวังว่าคงพอช่วยได้

ปล. การเปิดไฟล์ pdf จากภายนอก ต่อให้คุณกำหนดสิทธิ์ผู้ใช้ภายในฟอร์มอย่างไร ผู้ใช้เครื่องก็สามารถเปิดจากภายนอกได้อยู่ดี ดังนี้คุณอาจต้องใช้เทคนิคอื่นๆ เข้าช่วย ซึ่งแล้วแต่ความชำนาญของคุณด้วย รายละเอียดมันเยอะ ค่อยๆค้นคว้าจากเว็บ ศึกษาดูครับ ผมคงอธิบายไม่ไหวจริงๆ
5 @R15306
ivate Sub cmdLogin_Click()
Dim dbb As DAO.Database 'ÊÓËÃѺà¡çº Log
Dim rss As DAO.Recordset 'ÊÓËÃѺà¡çº Log

Dim rs As Recordset
Dim strSQL As String
Dim strPassword As String
Dim strUserName As String
Dim pers As String

On Error Resume Next

strUserName = TxtUsername.Value
strPassword = Password.Value
   
    Set db = CurrentDb
    strSQL = "SELECT Password FROM UserLogOn WHERE Username='" & strUserName & "'"
    Set rs = db.OpenRecordset(strSQL)
    If rs.RecordCount > 0 Then
        If rs.Fields(0) <> strPassword Then
            MsgBox "¤Ø³»é͹ª×èÍËÃ×ÍÃËÑʼèÒ¹äÁè¶Ù¡µéͧ ¡Ãسһé͹ãËÁè.", vbOKOnly, "Warning!"
        Else
            Me.Visible = False
            'CurrentProject.Connection.Execute "Insert into LogUser (UserName, Login) values(TxtUsername, Now()) " 'à¡çº¢éÍÁÙÅ¡Òà Login ¢Í§ User
             Set dbb = CurrentDb
             Set rss = db.OpenRecordset("LogUser", dbOpenDynaset) 'ºÑ¹·Ö¡ Log ¡ÒÃãªé§Ò¹Å§ã¹µÒÃÒ§
             rss.AddNew
             rss!UserName = strUserName ' ¤Ø³¨ÐÍéÒ§¶Ö§ª×èͤ͹â·ÃÅ·ÕèãËé¼Ùéãªé¾ÔÁ¾ì Username ¡çä´é
             rss!Login = Now() 'ºÑ¹·Ö¡·Ñé§ Çѹ·Õè áÅÐàÇÅһѨ¨ØºÑ¹
            rss.Update
            rss.Close: Set rss = Nothing
            dbb.Close: Set dbb = Nothing
            '....................................................................................................................................................
            

pers = DLookup("[Permissions]", "UserLogOn", "[Username]") '¡Ó˹´ÊÔ·¸ÔìãËé¡Ñº User áµèÅСÅØèÁ
Select Case pers
Case "Admin"
DoCmd.OpenForm "EDocument", acNormal, , , acDialog
Case "User"
DoCmd.OpenForm "EDocument", acNormal
Case "Guest''"
   DoCmd.OpenForm "FrmSearch", acNormal, , , acFormReadOnly
       
End Select


       acDialog   'ÊÑè§à»Ô´ Forms ËÅÑ¡
        End If
    Else
        MsgBox "¡Ãسһé͹ª×èÍáÅÐÃËÑʼèÒ¹. ÍÕ¡¤ÃÑé§.", vbOKCancel, "Warning!"
        TxtUsername.SetFocus
    End If

    
End Subivate Sub cmdLogin_Click()
Dim dbb As DAO.Database 'ÊÓËÃѺà¡çº Log
Dim rss As DAO.Recordset 'ÊÓËÃѺà¡çº Log

Dim rs As Recordset
Dim strSQL As String
Dim strPassword As String
Dim strUserName As String
Dim pers As String

On Error Resume Next

strUserName = TxtUsername.Value
strPassword = Password.Value
   
    Set db = CurrentDb
    strSQL = "SELECT Password FROM UserLogOn WHERE Username='" & strUserName & "'"
    Set rs = db.OpenRecordset(strSQL)
    If rs.RecordCount > 0 Then
        If rs.Fields(0) <> strPassword Then
            MsgBox "¤Ø³»é͹ª×èÍËÃ×ÍÃËÑʼèÒ¹äÁè¶Ù¡µéͧ ¡Ãسһé͹ãËÁè.", vbOKOnly, "Warning!"
        Else
            Me.Visible = False
            'CurrentProject.Connection.Execute "Insert into LogUser (UserName, Login) values(TxtUsername, Now()) " 'à¡çº¢éÍÁÙÅ¡Òà Login ¢Í§ User
             Set dbb = CurrentDb
             Set rss = db.OpenRecordset("LogUser", dbOpenDynaset) 'ºÑ¹·Ö¡ Log ¡ÒÃãªé§Ò¹Å§ã¹µÒÃÒ§
             rss.AddNew
             rss!UserName = strUserName ' ¤Ø³¨ÐÍéÒ§¶Ö§ª×èͤ͹â·ÃÅ·ÕèãËé¼Ùéãªé¾ÔÁ¾ì Username ¡çä´é
             rss!Login = Now() 'ºÑ¹·Ö¡·Ñé§ Çѹ·Õè áÅÐàÇÅһѨ¨ØºÑ¹
            rss.Update
            rss.Close: Set rss = Nothing
            dbb.Close: Set dbb = Nothing
            '....................................................................................................................................................
            

pers = DLookup("[Permissions]", "UserLogOn", "[Username]") '¡Ó˹´ÊÔ·¸ÔìãËé¡Ñº User áµèÅСÅØèÁ
Select Case pers
Case "Admin"
DoCmd.OpenForm "EDocument", acNormal, , , acDialog
Case "User"
DoCmd.OpenForm "EDocument", acNormal
Case "Guest''"
   DoCmd.OpenForm "FrmSearch", acNormal, , , acFormReadOnly
       
End Select


        ' DoCmd.OpenForm "EDocument", acNormal, , , , acDialog   'ÊÑè§à»Ô´ Forms ËÅÑ¡
        End If
    Else
        MsgBox "¡Ãسһé͹ª×èÍáÅÐÃËÑʼèÒ¹. ÍÕ¡¤ÃÑé§.", vbOKCancel, "Warning!"
        TxtUsername.SetFocus
    End If

    
End Sub


ผมลองเพิ่มตามที่คุณแนะนำ พอคลิ๊ก ปุ่มLogin แล้วหน้าจอ Login ก็หาย
และไม่ยอมเปิดฟอร์ม "EDocument" ให้ ผิดตรงไหนหรือเปล่าครับ
หรือผมใส่ถูกที่หรือเปล่า
6 @R15309
เดาว่าน่าจะเป็นที่บรรทัดนี้เงื่อนไขไม่ตรงครับ
pers = DLookup("[Permissions]", "UserLogOn", "[Username]") '¡Ó˹´ÊÔ·¸ÔìãËé¡Ñº User áµèÅСÅØèÁ

ปล. หากคุณต้องการกำหนดสิทธิกลุ่มผู้ใช้ คงต้องศึกษารายละเอียดเยอะครับ กว่าจะถึงขั้นใช้งานได้จริง แนะนำให้ใจเย็นๆ ค่อยๆเรียนรู้เรื่องของคำสั่ง เงื่อนไขให้แน่นพอสมควรครับ บอกอีกครั้งว่ามันเป็นเรื่องของเงื่อนไขซะมาก และวิธีการขึ้นอยู่กับผู้เขียนเอง ผมคงช่วยได้แค่แนะนำแนวคิดนะครับ บอกตรงๆว่าจะให้ผมนั่งวิเคราะห์ให้คุณผมคงไม่ไหวเหมือนกัน ประมาณนี้ครับ
7 @R17408
rs!Login_name = "ชื่อผู้ใช้" ' คุณจะอ้างถึงชื่อคอนโทรลที่ให้ผู้ใช้พิมพ์ Username ก็ได้
ตรงข้างบนนี้ ต้องการใช้ field textbox ที่ให้ผู้ใช้พิมพ์ username ต้องแก้ยังไงครับ
ชื่อ textbox คือ user2
หมายเหตุ ถ้าเอา user2 ใส่แทนคำว่า ชื่อผู้ใช้ ในตารางที่ลงเวลาจะใส่ชื่อ user2 ไปเลยครับ ไม่ได้ใส่ชื่อ user ที่ login เข้ามา
ขอบคุณครับ
8 @R17410
ส่วนใหญ่ผมจะบันทึกชื่อเครื่องด้วยครับ เพราะถ้าว่านาย ก. ไป Login ที่เครืื่องนาย ข. จะได้ทราบที่มาที่ไปครับ
9 @R17411
ถ้าเรื่องสิทธิ์การเข้า Form ถ้าจะทำแบบสามารถปรับเปลี่ยนได้ จะต้องทำ Table ของสิทธิ์ขึ้นมา 1 Table เลยครับ แล้วใช้วิธี Add ว่า Login สามารถใช้เมนูไหนได้บ้าง
10 @R22904
TTT = DLookup("Permissions", "Userlogon", "Username = 'ชื่อที่เข้าใช้'")

ขอโทษครับไม่รู้จริงๆ TTT ในที่นี้หมายถึงอะไรครับ
11 @R22912
พอดีกำลังจะทำเกี่ยวกับสิทธิ์ของผู้ใช้งาน แต่เข้ามาดู code แล้วไม่ค่อยเข้าใจครับว่า TTT หรือ pers อ้างอิงถึงอะไร รบกวนอาจารย์ช่วยตอบหน่อยนะครับ

ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3324s