วันพุธที่ 19 กุมภาพันธ์ พ.ศ. 2557

การแปลง ตัวอักษร เป็นตัวเลข ใน Crosstab Query

ปัญหาอย่างหนึ่งในการการส่งออกข้อมูล จากฐานข้อมูลเป็น ไฟล์ XML ก็คือเรื่อง data type เพราะ XML ไฟล์ ส่งออกข้อมูลออกมาในลักษณะ Text เท่านั้น แม้ข้อมูลในฐานข้อมูลเดิมจะเป็นประเภท Integer หรือ ตัวเลขประเภท อื่น ๆ ก็ตาม  ปัญหาที่ตามมาก็คือ ถ้าจะมีการนำมาคำนวณ หรือจัดการด้านตัวเลข ค่าอาจจะผิดพลาดได้ เช่น การหาค่าสูงสุด หรือต่ำสุด เพราะการเรียนแบบ Text กับการเรียงแบบตัวเลข จะไม่เหมือนกัน

ถ้าเรียงแบบ Text ตัวเลข 2 จะมากกว่า 100
ถ้าเรียงแบบ ตัวเลข ค่าตัวเลข 2 จะน้อยกว่า 100

ข้อมูลข้างล่างนี้ สมมุติว่าเอาเข้ามาจาก XML โดยมี Data Type เป็น Text

การแก้ปัญหาง่าย ๆ คือ เปลี่ยน Data Type ของฟิลด์ จำนวนรวม ให้เป็น Number เสียก่อน แล้วจึงจัดการด้านการคำนวณต่อไป
ถ้านำข้อมูลเดิม มาจัดทำ Crosstab Query เพื่อดูว่า ใคร ซื้อสินค้าอะไร ไปจำนวนสูงสุดเท่าไร
จากข้อมูล จะเห็นว่า

  • สมหมาย ซื้อปากกาจำนวนมากที่สุด คือ  จำนวน 100 แท่ง
  • ประกอบ ซื้อดินสอมากที่สุด คือ 100 แท่ง
ถ้าไม่มีการเปลี่ยน Data type ผลการวิเคราะห์ จาก Crosstab Query จะเป็นดังนี้


จากภาพ จะเห็นว่า เป็นข้อมูลที่ไม่ถูกต้อง เมื่อดูในหน้าต่าง QBE ในมุมมองออกแบบ จะเห็นดังนี้



วิธีการแก้ปัญหา ก็คือ สั่งเปลี่ยน Data Type โดยใช้ฟังก์ชัน CInt() เปลี่ยนเป็น ตัวเลขจำนวนเต็ม เพราะการซื้อสินค้า คงซื้อเป็นจำนวนเต็ม ไม่มีทศนิยมแน่นอน ดังนี้


เพียงเท่านี้ เมื่อสั่งให้ Run ดู ก็จะได้ข้อมูลการเรียงที่ถูกต้อง ดังข้างล่างนี้


 ข้อควรระวังอย่างหนึ่ง ในการแปลงตัวอักษรเป็นตัวเลข ด้วยคำสั่ง CInt()  CDbl() หรืออื่น ๆ ก็คือ ถ้าข้อมูลเดิม ไม่ใช่ตัวเลข แต่เป็นตัวอักษร เช่น เครื่องหมาย - เป็นต้น โปรแกรม Access จะไม่สามารถทำงานได้ และจะแสดงข้อผิดพลาด ดังนี้






ไม่มีความคิดเห็น:

แสดงความคิดเห็น