บทความที่ 7 การคำนวณอายุใน คิวรีย์ QR01Customs
ถือเป็นแค่ 1 ตัวเลือกในการคำนวณอายุ คือ การคำนวณไว้ในคิวรีย์ โดยส่วนมากแล้วจะใช้สำหรับคำนวณอายุ หรือระยะเวลาเทียบกับวันที่ปัจจุบัน ส่วน อีกวิธีที่ผมคิดได้คือ ใช้ฟอร์มคำนวณแล้วค่อยนำไปเก็บไว้ในตาราง ซึ่งจะได้ ทั้ง 3 ส่วนคือวันเริ่มต้น(วันเกิด) วันสิ้นสุด(วันที่ที่เราต้องการให้นับอายุ) และอายุ ณ วันเกิดถึงวันสุดท้ายในการนับ (ความคิดผมแล้วอันหลังน่าสนุกกว่า แต่เพื่อให้เกิดความเข้าใจในการใช้คิวรีย์เพื่อคำนวณ ผมจึงจะอธิบาย คิวรีย์ก่อนแล้วค่อยไปอธิบาย ฟอร์มภายหลัง
ผมไปเจอ สูตรนี้ (เหมือนเกมส์ สมัยก่อนมีสูตร)
ปี = Int(DateDiff("m",[P_BDate],Date())/12)
เดือน = Int(DateDiff("m",[P_BDate],Date()) Mod 12)
วัน = Int(DateDiff("d",[P_BDate],Date()) Mod (30))
ก็ต้องมาคิดว่าจะทำยังไงให้มันมาอยู่ใน คิวรีย์ของเรา เริ่มคิด
1. ทำให้มันเป็น 3 คอลัมภ์ แยก ปี เดือน วัน ออกจากกัน
2. ทำให้เป็น คอลัมภ์เดียว เอายาว ๆ ไปเลย
3. ทำมันทั่ง 2 แบบเลยอยากใช้อันไหนก็ใช้ (ความคิดดีแต่เปลืองความคิดจัง)
อยากให้บทนี้จบเร็ว ๆ ก็เอาตัวอย่างไปดูกันเลยไม่ต้องอ่านคำอธิบายด้านล่าง
ลิ้งค์ไฟล์ตัวอย่าง
http://www.4shared.com/archive/wtE_7Whgba/Test09T7.htmlเริ่มการเพิ่ม คอลัมภ์สำหรับ คิวรีย์ QR01Customs
1. คลิ๊กขวาบน Field ในคอลัมภ์ที่ว่างแล้วเลือกคำสั่ง Build...
2. เพิ่มสูตรนี้ AgeYear: Int(DateDiff("m",[CusBDate],Date())/12)
อธิบาย
AgeYear : ในส่วนนี้คือชื่อของคอลัมภ์ที่เราต้องการตั่งอะไรก็ได้ให้เข้าใจ ตามด้วย เครื่องหมาย : (โคลอน)
int() หมายถึงแปลงตัวเลขที่อยู่ภายใน วงเล็บเป็นจำนวนจริง
DateDiff (X,Y,Z) อันนี้ไม่ค่อยเข้าใจมันมากเพราะก๊อบเขามา X คือ กำหนดให้สูตรนี้แสดงในรูปแบบใด เช่น "m" คือเป็นจำนวนเดือน "y" เป็นจำนวนปี "d" เป็นจำนวน วัน เป็นต้น ถ้าผิดพลาดในการอธิบายขออภัย ในส่วนของ Y คือ วันเกิดหรือวันเริ่มต้น ต้องอ้างอิงคอลัมภ์ที่เก็บขอมูลวันไว้นะครับ ถ้าไม่เป็นวัน จะ error ต่อไปก็ส่วนของ Z คือวันสุดท้าย ให้รับค่าจากสูตร Date() สูตรนี้คือรับวันที่ปัจจุบัน อ่อลืม บางท่านอาจเห็นเลขชุดสุดท้ายคือ /12 มันคือสูตรของ int นะครับ ไม่ใช่ของ วัน คือเอาค่าที่ได้รับจาก DateDiffมาหาร 12 นั่นเอง
3. เมื่อพิมพ์สูตรเสร็จ กด Ok จะได้ตามรูปล่าง
4. กดบันทึกแล้ว เปลี่ยนมุมมองเป็นมุมอง แบบตาราง จะเห็นว่าเราได้ คอลัมภ์ชื่อ AgeYear เพิ่มเข้ามาและมีการคำนวณ อายุปีมาให้แล้ว
5. ต่อไปเราจะคอลัมภ์คำนวณอายุเดือน และอายุวัน ตามสุตรนี้
AgeMount: Int(DateDiff("m",[CusBDate],Date()) Mod 12)
AgeDay: Int(DateDiff("d",[CusBDate],Date()) Mod (30))
อธิบายเพิ่มเติม Mod คือ เอาที่เหลือหลังจากหารด้วย ... ลงตัว เช่น Mod 12 คือ เอาค่าที่เหลือหลังจากหารด้วย 12 ลงตัว ส่วน mod (30) ยังงงอยู่ไม่สามารถอธิบายได้ ฮ่า ฮ่า ฮ่า
ถ้าพิมพ์ไม่พลาดใด ๆ หรือก๊อบไปวางถูกที่จะได้ คิวรีย์หน้าตาแบบนี้
มีส่วนของ วันเดือนปีเกิดมาแล้ว
ต่อไปก็สูตร คำนวณ วันเดือนปี ในคอลัมภ์เดียว
Age: Int(DateDiff("m",[CusBDate],Date())/12) & " ปี " & Int(DateDiff("m",[CusBDate],Date()) Mod 12) & " เดือน " & Int(DateDiff("d",[CusBDate],Date()) Mod (30)) & " วัน"
ถ้าทำถูกจะได้ตามภาพด้านบน
ตอนนี้คงยังไม่ได้ใช้ประโยชน์อะไรสำหรับ การคำนวณพวกนี้แต่อาจได้ใช้ในการนำไปแสดงบนฟอร์มหรือบนรายงาน (แต่รายงานและฟอร์มก็สามารถคำนวณพวกนี้ได้ด้วยตัวมันเอง(ก็ยังต้องพิมพ์สูตรอยู่ดี)
แต่ด้วย หากฟอร์มมีการคำนวณมากจะทำให้ฟอร์ม หรือการใช้โปรแกรมที่เราทำขึ้นมีอาการหน่วงหรืออืด ได้ ความคิดผมคือคำนวณ ใน คิวรีย์แยกจากตารางหลัก แล้วค่อยเอาค่าที่คำนวณได้ไปเก็บไว้ในตาราหลัก เช่น ในตารางหลัก ทำฟิวล์ อายุปี อายุ เดือน อายุวัน แล้วก็วันที่คำนวณ รวม 4 ฟิวล์ เพื่อเก็บค่าคงที่ที่ได้จากการคำนวณ เมื่อนำไปแสดงในฟอร์มหรือ รายงาน จะไม่ทำให้มีการคำนวณเกิดขึ้นทำให้โปรแกรมเราทำงานได้เร็ว
การคำนวณอายุบนฟอร์ม แล้วส่งไปเก็บไว้ในตาราง
ขอค้างไว้ก่อน
บทความเดิม (เอาแค่ลิ้งก็พอเนอะ )
1
http://access2013bysuwit.blogspot.com/2014/05/email-access-2-3-google-access-2013.html2
http://access2013bysuwit.blogspot.com/2014/06/list-box-vba-list-box-unbound-textbox.html3
http://access2013bysuwit.blogspot.com/2014/06/3-text-box-vba-code-1-text-box-2-text.html3.5
http://access2013bysuwit.blogspot.com/2014/06/3.html4
http://access2013bysuwit.blogspot.com/2014/06/4-text-box-private-sub-cmdsaveclick-if.html5
http://access2013bysuwit.blogspot.com/2014/06/5-rccount-row-2-cusid-rccount-rccount-8.html6
http://access2013bysuwit.blogspot.com/2014/06/6-text-box-combo-box-textbox-google-8.html