เขตข้อมูล คาบสอน,วันที่,เดือน ต้องไม่ซ้ำกันในแต่ละ
กระทู้เก่าบอร์ด อ.Yeadram

 1,596   2
URL.หัวข้อ / URL
เขตข้อมูล คาบสอน,วันที่,เดือน ต้องไม่ซ้ำกันในแต่ละ

อยากขอถามผู้รู้ทั้งหลายว่าถ้าเราจะสร้างโปรแกรมจัดนิเทศน์การสอน โดยที่เขตข้อมูล คาบสอน,วันที่,เดือน ไม่ซ้ำกัน ทำอย่างไรคะ
เช่น ถ้าคาบสอนที่ 1 วันจันทร์ เดือน กันยายน พ.ศ.2554 ครูวันทนีย์ แล้วถ้ามีครูไชยา จะมาลงคาบสอนที่ 1 วันจันทร์ เดือน กันยายน พ.ศ.2554 อีกไม่ได้ ต้องทำอย่างไรคะ คือมันจะคล้ายกับโปรแกรมจัดตารางสอนน่ะค่ะ แต่เพิ่งเริ่มหัดทำค่ะ วอนผู้รู้ทั้งหลายช่วยให้คำปรึกษาด้วยนะคะ....ขอบคุณค่ะ

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

1 @R11012
- ออกแบบตารางให้ดีครับ
ฟิลด์ที่เก็บ วันเวลา ต้องเก็บข้อมูลแบบเต็มๆ หมายความว่า เวลาบันทึกข้อมูลหรือแก้ไขข้อมูล ต้องให้ครบถ้วน ทั้ง วัน เดือน ปี ชม. นาที วินาที ต้องครบจริงๆ
- การรับข้อมูล
คุณอาจต้องออกแบบฟอร์มเพื่อรับการบันทึกข้อมูลในส่วนนี้ให้รัดกุม รวมทั้งต้องเขียนโค้ดตรวจสอบรูปแบบข้อมูล ลักษณะการเรียง dd mm yy hh nn ss อะไรก็ตาม ต้องควบคุมให้แม่นยำ ก่อนจะ.... นำเข้าตาราง
คุณต้องเขียนโค้ดให้รัดกุม ผู้ใช้จะกรอกวันเวลาแบบพุทธ แบบคริสต์ หรือกรอกผ่านคอนโทรลพิเศษอะไรก็ตาม ก็ต้องตรวจสอบและแปลง(ถ้าจำเป็น) ให้เป็นรูปแบบสากลที่สุด คือแบบคริสต์ yyyy-MM-dd hh:mm:ss ก่อนจะบันทึกเข้าตาราง และควรสั่งบันทึกด้วย สายอักขระ SQL ไม่ควรปล่อยให้ Access บันทึกเอง เพราะเราต้องการความแม่นยำสูงมาก เรื่องวันเวลา

- การแสดงผลหน้าฟอร์มหรือรายงานหรือคิวรี่ หรือตาราง(แสดงผลหน้าจอ)
อันนี้ไม่สนใจครับ คุณจะแสดงยังไง วันที่พุทธ วันที่คริสต์ สั้นหรือยาว ไม่มีผลครับ อยากทำยังไงก็ทำ หรือปล่อยให้ system date ของวินโดวส์จัดการก็ได้ ย้ำว่าตรงนี้ไม่มีผลในการคำนวน

- การเปรียบเทียบ
อาจต้องมีการใช้บ่อย ไม่ว่าจะเป็นขั้นตอนตรวจสอบก่อนบันทึก ขั้นตอนกรองข้อมูล ค้นข้อมูล เรียงลำดับข้อมูล อันนี้ก็ต้องเขียนโค้ดแปลงรูปแบบก่อนค่อยเปรียบเทียบ คือแปลงให้เป็นแบบสากลก่อน ทั้งสองฝั่ง เช่น
คุณก็ต้องแปลงค่าทุกอย่างก่อนจะเข้ารูปแบบหลักๆ ดังนี้
สมมติผู้ใช้กรอกใน textbox ชื่อ startdate มาเป็น "24 สิงหาคม 2554 12:01:00"

txbox = cdate(mYear(me.txstatedate) & "-" & month(me.startdate) & "-" & day(me.startdate) & right(me.startdate,9))
ข้อมูลในตัวแปร ในแรมของเรามันจะเก็บเป็น 2011-08-24 12:01:00
** ฟังก์ชั่น mYear() เป็นฟังก์ชั่นที่ผมเขียนขึ้นโพสต์ไว้ในเว็บบอร์ดนี้ ลองหาดูเอาครับ เป็นตัวช่วยแปลงปี ให้เป็นคริสต์เสมอ ไม่ว่าเครื่องผู้ใช้จะเก็บ system date แบบพุทธหรือคริสต์

startperiod = dLookup("DateStart","table1", "recID=1")
endPeriod = dlookup("DateEnd","table1", "recID=1")

รูปแบบหลักคือ
if txbox > = startperiod and txbox < = endPeriod then
ถ้าเงื่อนไขนี้เป็นจริง แสดงว่า วันเวลาที่ผู้ใช้กรอกเข้ามา ซ้ำกับช่วงเวลาในตาราง
ถ้าเงื่อนไขเป็นเท็จก็แสดงว่า ช่วงเวลาไม่ซ้ำกัน

ดังนั้นสรุปก็คือ
1 ออกแบบตารางให้ดี เก็บข้อมูล datetime ทั้งช่วงเริ่มและสิ้นสุด
2 ตรวจสอบข้อมูลทุกครั้งก่อนบันทึก หรือก่อนแก้ไข
3 แปลงรูปแบบข้อมูลก่อนทุกครั้งที่จะมีการเปรียบเทียบค่า
4 การเปรียบเทียบช่วงเวลาที่ซ้ำกัน แนะนำว่าอย่าใช้ Between ให้ใช้ > = หรือ < = คู่กันกับโอเปอเรเตอร์ and หรือ or เพื่อความแม่นยำครับ
5 สำเหนียกไว้ในใจเสมอว่า ปัญหาที่อาจเกิดขึ้น ปัญหาที่ต้องจัดการแก้ไข ปัญหาที่ต้องป้องกัน อย่างมากๆ คือเรื่อง รูปแบบวันเวลาครับ
2 @R11017
*** สนใจแชร์โปรเจคนี้
รบกวนคุณ pang แอดเมล์ด้วยครับ
ph.arkom@hotmail.com
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3282s