ผู้เขียน หัวข้อ: ผมไปเจอ สูตรนี้ (เหมือนเกมส์ สมัยก่อนมีสูตร)  (อ่าน 937 ครั้ง)

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

banrong

  • Administrator
  • Sr. Member
  • *****
  • กระทู้: 350
    • ดูรายละเอียด
    • อีเมล์
บทความที่ 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.html
2 http://access2013bysuwit.blogspot.com/2014/06/list-box-vba-list-box-unbound-textbox.html
3 http://access2013bysuwit.blogspot.com/2014/06/3-text-box-vba-code-1-text-box-2-text.html
3.5 http://access2013bysuwit.blogspot.com/2014/06/3.html
4 http://access2013bysuwit.blogspot.com/2014/06/4-text-box-private-sub-cmdsaveclick-if.html
5 http://access2013bysuwit.blogspot.com/2014/06/5-rccount-row-2-cusid-rccount-rccount-8.html
6 http://access2013bysuwit.blogspot.com/2014/06/6-text-box-combo-box-textbox-google-8.html