Run-Time Error 94 ... ปัญหาเล็กๆแต่สร้างความมึนงงได้เป็นอย่างดี 55555+

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 20/10/2551 19:19:00
(อ่าน : 22751) 
ก็ห่างหายไปจากการเขียนบทความมาเป็นเวลานานพอสมควรร่วม 2 เดือน ที่ปักหลักกับงาน 2 โปรแกรม และ 1 Dynamic Web Site ก็เพื่อปากเพื่อท้องผมเองแหละครับ ... หรือ สาวๆท่านใดหัวใจว่างๆ หากสนใจก็เชิญติดต่อเข้ามาได้เลยน่ะครับ ผมรับรองว่าจะหาเลี้ยงด้วยลำแข้งของตัวผมเองเลยทีเดียว 55555+ ... เอาล่ะครับหันกลับมารับใช้เพื่อนพ้องน้องพี่กันต่อไปดีกว่า แต่ก่อนที่จะเขียนบทความนี้ก็ต้องไปสืบเสาะกับ Google เขาซ่ะก่อนล่ะว่ามีใครกล่าวถึงเรื่องนี้หรือยัง อ้อ ... ยังไม่มี ถึงมีก็คนละสไตล์ ... แหล่มๆๆๆๆ ... จะว่าไปแล้ว Run-time error 94 : Invalid use of Null ค่อนข้างจะเกี่ยวข้องกับเรื่องของฐานข้อมูลเป็นหลักอยู่แล้ว ใครที่เป็นมือใหม่ๆก็จะงงกันเป็นแถว (ยกเว้นไปลอกจากหนังสือเขามาทั้งหมด แล้วก็รันๆๆๆๆ ผ่านแล้ว ไม่มี Error ... ตูเขียนโปรแกรมเป็นแล้ว โย้วววว ... แบบนี้ก็คงจะไม่มีวันรู้หรอกครับ ... 55555+) สำหรับท่านใดที่เคยติดตามบทความเรื่อง VB6 ของผมมาโดยตลอด จะพบอะไรบางอย่างที่ประหลาดๆแตกต่างไปจากหนังสืออยู่แล้วแหละครับ เพราะ Error นี้ มันเกิดขึ้นจากตัวเราผู้เขียนโปรแกรมขึ้นมาเองไงล่ะครับ ... เราลองมาดูคำเฉลยกัน
  1. Run-time error 94 : Invalid use of Null
  1. การดัก หรือ Trap Error ... แล้วมันผิดปกติตรงไหนกันล่ะเนี่ย
  2. จากภาพ คือ การนำข้อมูลเข้ามาแสดงผลในตารางกริด แต่ติดตรงที่หาก RS("CustomerID") ไม่มีค่าใดๆเลย ก็จะเกิดปัญหา Run-time error 94 ขึ้นมาทันที
  1. ตารางฐานข้อมูลกำหนดให้ฟิลด์ CustomerID เป็นแบบ Text และ อนุญาตให้ความยาวเป็นศูนย์ได้ (คือไม่ต้องใส่ค่าอะไรเลยก็ได้) ... นี่แหละคือตัวสร้างปัญหา
  1. การแก้ปัญหาด้วยการใส่เครื่องหมาย Double Quote "" วางไว้ก่อนเพื่อเชื่อม (ด้วยเครื่องหมาย &) กับข้อมูลอีกครั้งหนึ่ง แต่เฉพาะที่เป็นตัวอักษรเท่านั้นน่ะครับ และแน่นอนว่าหาก RS("CustomerID") เป็นค่าว่างมา ก็จะไม่มี Error เกิดขึ้นเลย (ไม่ได้แปลว่าเราหลบ Error น่ะครับ)
ดังนั้นแล้วกรณีที่เก็บข้อมูลเป็นแบบ Text หรือ String ไม่ว่าจะใช้ฐานข้อมูลตัวไหนก็ตามที เราจะต้องกระทำอย่างที่ผมได้อธิบายมาแล้วข้างต้นเสมอ
นี่คือตัวอย่างของการสร้าง Bug ขึ้นมาน่ะครับ ... ลองดูที่ CustomerPK (ค่าตัวเลข - Number) ซึ่งผมทะลึ่งเอาเครื่องหมาย Double Quote ไปใส่เอาไว้ก่อน ให้นักเรียนโข่งทั้งหลายลองคิดตามไปด้วยน่ะครับว่าโอกาสที่โปรแกรมจะทำงานพลาด จะเกิดขึ้นได้อีกในกรณีไหน และ เมื่อไร หรือว่ามันจะไม่เกิด Error ใดๆขึ้นมาเลย ... 55555+