ผู้เขียน หัวข้อ: การเก็บวันเวลา login-logout ของ user  (อ่าน 2371 ครั้ง)

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

suwachai

  • Administrator
  • Jr. Member
  • *****
  • กระทู้: 70
  • **กลุ่มต่อต้านการกระทำรุนแรงต่อสามี**
    • ดูรายละเอียด
    • อีเมล์
เรียน อาจารย์ และผู้รู้ทุกท่านคะ

จูนได้สร้าง form login เข้าสู่ระบบให้ user แต่ละแผนกได้แล้ว โดยมี
1.table
User เก็บ UserName และ Password ของแผนกต่างๆ ไว้แล้ว
2.form
login เพื่อใช้เข้าสู่เมนูแผนกต่างๆ ดังนี้
- FrmMenuAccount
- FrmMenuRelated
- FrmMenuSales
- FrmMenuTechnical
- FrmMainMenu สำหรับผู้จัดการ (เปิดได้ทุกฟอร์ม)

*สิ่งที่จูนต้องการตอนนี้คือ อยากให้โปรแกรมสามารถบันทึก ว/ด/ป , เวลา การ login-logout ของ user ทั้งหมดโดยอัตโนมัติเมื่อมีการ login-logout คะ
*จูนต้องสร้างตาราง ฟอร์ม และเขียนโค้ดยังไงบ้างคะ

รบกวนอาจารย์ และผู้รู้ทุกท่านด้วยนะคะ /ขอบคุณคะ


-------------------
สร้าง ตารางมาอีก 1 ตาราง ชื่อ tbLog
f1 เก็บ user ห้ามว่าง
f2 ชนิด Date/Time เก็บเวลา login     ห้ามว่าง
f3 ชนิด Date/Time เก็บเวลา logout อนุญาตให้ว่างได้

ในฟอร์ม login ของคุณ คงจะมีคำสั่งตรวจสอบ user name กับ password อยู่แล้ว
คงเป็น If......then...else
ให้คุณไปดูว่า ทางเลือกใด ที่คุณอนุญาตให้เขาเข้าใช้งาน ซึ่งแสดงว่าเป็นทางเลือกหลังการตรวจสอบแล้วพบว่า ถูกต้อง

เช่น
if ................... then
docmd.openform..............
else
.........
end if

ให้คุณไปแทรกคำสั่งไว้ก่อนจะสั่งเปิดฟอร์มนั่นแหละครับว่า

currentproject.connection.execute "Insert into tblog (f1, f2) values('อ้างชื่อtextboxที่คุณให้เขากรอก username', Now())
เสร็จแล้วครับ
--------------------

คุณควรจะสร้าง ตัวแปร Public ไว้ที่โมดูล ตัวหนึ่งเพื่อเก็บ username ให้เป็นตัวแปรเอาไว้ใช้ในงานต่างๆ เช่นการตรวจสอบสิทธิ์ก่อนจะรันคำสั่งสำคัญๆ และรวมถึงใช้ในเวลาล็อกเอ้าท์ด้วย เช่นสมมติคุณประกาศไว้ว่า
Public userName as string
เมื่อมีการล็อกอินทุกครั้ง ถ้าตรวจสอบพาสเวิร์ดผ่านก็เพิ่มคำสั่งต่อด้วยว่า
userName = 'อ้างชื่อtextboxที่คุณให้เขากรอก username'

เมื่อมีการล็อกเอ้าท์ ออกจากระบบ
ถ้าคุณมีปุ่มให้ล็อกเอาท์ ก็ให้คุณไปดูคำสั่งในนั้นแล้วแทรกคำสั่งเข้าไปเพื่อบันทึกเวลาล็อกเอาท์ดังนี้


dim rs as adodb.recordset

dim sq as string

sq = "select Top 1 tblog.* from tblog where f1 Like '" & userName & "' Order by f2 Desc;"

rs.open sq, currentproject.connection,1, 3

if not rs.eof and not rs.bof then

rs(2)=now()

rs.update

end if

rs.close

set rs.nothing



ข้อจำกัด ข้อควรระวัง คำตอบล่วงหน้าสำหรับคำถามที่ต่อเนื่อง
อาจมีกรณีไฟดับ เครื่องแฮ้งค์ หรือมี Software อื่นใด ที่สั่งการหรือบังคับให้ Access หยุดการประมวลผลโดยกระทันหัน และ/หรือมีเหตุอื่นหลายๆ ประการใดๆ ก็ตามที่ทำให้ ผู้ใช้มิได้กดปุ่ม logout โปรแกรมก็จะไม่มีการบันทึกเวลาล็อกเอาท์เอาไว้
และเมื่อผู้ใช้เดิมได้ทำการล็อกอินใหม่ ก็จะเป็นการเพิ่มรายการใหม่เข้าไปในตาราง tblog ดังนั้น อาจจะ ตรวจพบในภายหลังได้ว่า มีการล็อกอินจากผู้ใช้คนเดียวกันหลายครั้งที่ยังไม่มีบันทึกเวลาล็อกเอาท์ ก็ไม่ต้องไปแก้โค้ดใดๆ ควรหาทางแก้อื่นๆ เช่นดูแลระบบเครื่องให้ดีอย่าให้แฮ้งค์บ่อย ดูแลระบบไฟฟ้าอย่าให้ดับบ่อยๆ แนะนำผู้ใช้ให้กด ล็อกเอาท์ทุกครั้งก่อนปิดโปรแกรม

โค้ดที่บันทึกเวลาล็อกเอาท์ตัวนี้ จะนำเวลาล็อกเอ้าท์ไปใส่ในรายการที่มีการล็อกอินล่าสุดเท่านั้น (และโดยไม่สนว่ามีข้อมูลเก่าในนั้นหรือไม่)

ปัจฉิมลิขิต...
   หากโค้ด error ในบรรทัดตัวสีน้ำเงิน
ให้ลองปรับเปลี่ยนค่าในตัวหนังสือสีแดง สลับเลขหาดู เพราะผมเองก็ไม่แม่น และไม่ได้ทดสอบ ให้ลองเปลี่ยนจาก 1,3 เป็น 3,3 หรือ 3,1 หาไปเรื่อยๆ ครับเดี๋ยวก็หาย error เองครับ