วันพุธที่ 31 กรกฎาคม พ.ศ. 2556

Is Null และ ช่องว่าง ใน Access VBA

วันนี้ปวดหัวอยู่ตั้งนาน เพราะเรื่อง Is Null และ ช่องว่าง หรือ ข้อความว่างเปล่า ใน Access นั่นเอง

เรื่องก็คือว่า มีข้อมูลในตาราง ที่กำหนดชนิดข้อมูลเป็น Text ตั้งค่าเริ่มต้นให้เป็นว่าง หรือ "" ในตารางมีข้อมูลอยู่แล้ว และได้ลบข้อมูลออกทิ้งไป ต่อมาต้องการสร้างเงื่อนไขใน Query ให้แสดงข้อมูลในฟิลด์นี้ โดยกำหนดเงื่อนไข ดังนี้
 
ผลปรากฎว่า ไม่มีอะไรออกมาให้เห็นเลย ทั้ง ๆ ที่ก็เห็น ๆ อยู่ว่า เคยมีข้อมูลอยู่ และลบไปแล้ว ตอนนี้ไม่มีอะไรแล้ว

ทำไปทำมา ก็ได้ข้อสรุปว่า ข้อมูลชนิด Text ที่ลบไปแล้วเมื่อสักครู่ ปัจจุบัน กลายเป็น Null เลยทดสอบ เปลี่ยนเงื่อนไขใหม่ เป็น
คราวนี้ ปรากฏว่า มีข้อมูลใน Record ที่ลบฟิลด์ isPass ไปแล้ว มาแสดงให้เห็น

แต่ปัญหาก็คือ มีฟิลด์ isPass ใน Record อื่น ที่มีค่าเป็น "" หรือข้อความว่าง เมื่อกำหนดเงื่อนไขเป็น Is Null ข้อมูลใน Record ที่มีข้อความว่าง ก็จะไม่ปรากฏ เพราะไม่เป็นไปตามเงื่อนไข

ทางแก้ก็คือ ต้่องใช้ฟังก์ชัน Nz() มาช่วย โดยสร้างฟิลด์ใหม่ แปลงข้อมูลที่เป็น Null ให้เป็นข้อความว่าง หรือ "" เสียก่อน แล้วจึงกำหนดเงื่อนไขเป็น ข้อความว่าง หรือ "" ดังนี้

คราวนี้ ทั้งพวกที่เป็น Null และ "" หรือข้อความว่าง ก็มาปรากฏให้เห็นกันพร้อมหน้า

ถ้าจะนำไปใช้ใน VBA แสดงโค้ด ดังนี้

SELECT nameFromAppForm.fname, nameFromAppForm.isPass, Nz([ispass],"") AS newIsPass
FROM nameFromAppForm
WHERE (((Nz([ispass],""))=""));

ผมชอบสร้าง Query แล้วนำไปใช้ในโค้ด ประหยัดเวลา และความคิดได้มาก โดยใช้ คำสั่ง Execute ให้ทำงาน เช่น

strSQL = "UPDATE nameFromAppForm INNER JOIN " & _
"tblTempData ON nameFromAppForm.fullname = " & _
"tblTempData.fullname SET nameFromAppForm.isPrePostScore = " & _
"[tblTempData].[isFinishAll];"

CurrentDb.Execute strSQL

1 ความคิดเห็น: