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
เรื่องก็คือว่า มีข้อมูลในตาราง ที่กำหนดชนิดข้อมูลเป็น 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
เยี่ยมมากครับท่าน
ตอบลบ