ข้อความโดย: suwachai
« เมื่อ: 05/05/15 »เรียน อาจารย์ และผู้รู้ทุกท่านคะ
จูนได้สร้าง 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 เองครับ
จูนได้สร้าง 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 เองครับ