ปฏิทินสำหรับ ms access

กันยายน 23, 2010

ms access มี ปฏิทิน ซึ่งเป็น ActiveX ให้เลือกใช้ตามสะดวก แต่ปัญหาก็คือ เมื่อมีการเปลี่ยนรุ่น เช่น จาก ms access 2003 หรือ 2007 เป็น access 2010 เจ้า activeX จะก่อปัญหา มี error ขึ้นว่า No object in this control. ดังนั้น จึงควรใช้ ปฏิทิน ที่เป็นฟอร์มธรรมดา ดีกว่า

Allen Browne เขียนปฏิทินไว้ให้แล้วที่ http://allenbrowne.com/ser-51.html สามารถนำมาใช้ได้เลย สามารถปรับฟอร์ม frmCalendar เปลี่ยนภาษาอังกฤษให้เป็นไทยได้ เช่น ชื่อย่อวันในรอบสัปดาห์ เป็นต้น ข้อดีอีกอย่างคือ วัน เดือน ปี ใช้จากในเครื่อง จึงเห็นเป็นภาษาไทย และปี เป็นปี พุทธศักราช


การยกเลิก keypress event ใน ms access

กันยายน 23, 2010

ในกรณีที่มีกล่องข้อความ (text box) ให้เติมข้อความ แต่ไม่ต้องการให้คนพิมพ์เข้าโดยตรง ให้คลิกปุ่มเพื่อเลือกวันที่ จากปฏิทิน เท่านั้น เมือผู้ใช้กดแป้นที่กล่องข้อความเพื่อจะพิมพ์ข้อความ ก็ให้แสดง Message และยกเลิกตัวอักษรที่เพิ่งพิมพ์ไปในกล่องข้อความ

ให้เลือกเขียน event procedure ที่ on keypress ของกล่องข้อความนั้น (ไม่ใช้ on keyDown เพราะ on keypress จะเกิดเมื่อกดแป้นและปล่อย ภายในเวลาประมาณ 500 ms แต่ถ้ากดค้างไว้จะเกิด on keyDown event)

การยกเลิก keyPress event ไม่สามารถทำได้ใน event procedure ต้องสร้าง macro และเลือก cancelEvent ใน Macro ที่สร้างขึ้น จากนั้น จึงมาเรียกใช้ใน Event procedure อีกครั้งหนึ่ง

ตัวอย่าง

สมมตว่า text box ชื่อ txtCalendar บนฟอร์ม frmMyForm และไม่ต้องการให้พิมพ์ ถ้ากดแป้นให้มี Message ขึ้น และให้ยกเลิกตัวอักษรใด ๆ ที่พิมพ์ลงไป ทำดังนี้

1. สร้าง Macro โดยไปที่ Objects Macro > New
2. ที่ Action เลือก CancelEvent และปิด Macro โดยตั้งชื่อ เช่น myCancelEvent
3. กลับมาที่ฟอร์ม frmMyForm และคลิกที่ txtCalendar และเปิด property
4. เลือก Event และเลือก on keypress และสร้าง Code ดังนี้

Private Sub txtCalendar_KeyPress(KeyAscii As Integer)
MsgBox "กรุณาใช้ปุ่มเลือกวันที่", vbInformation, "โปรแกรมธนาคารโรงเรียน"
DoCmd.RunMacro "myCancelEvent"
End Sub