แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - ชีวิต ไม่สิ้นหวัง

หน้า: [1]
1
ในฟิลด์ Data Type แบบ Text หากกำหนดคุณสมบัติหัวข้อ Allow Zero Length: Yes จะเป็นการกำหนดให้โปรแกรม MS Access เห็นค่าของสตริง "" ไม่เหมือนกับค่า Null กล่าวคือ ค่า Null ของ String ไม่เหมือนกับค่า String ที่มีความยาวเป็น 0 เช่น เมื่อเรากำหนด Allow Zero Length: Yes และกำหนด Required: Yes (หมายถึง ฟิลด์นี้ต้องใส่ข้อมูลห้ามเป็นค่าว่าง) เมื่อเราทำการคีย์ข้อมูลเราสามารถใส่ค่าเครื่องหมาย "" บนฟิลด์ที่กำหนด Required: Yes ได้ โดยโปรแกรมจะเห็นว่ามีค่าแล้ว แต่หากกำหนด Allow Zero Length: No และกำหนด Required: Yes เมื่อเราคีย์ข้อมูลใส่ค่าเครื่องหมาย "" บนฟิลด์ที่กำหนด Required: Yes โปรแกรมจะไม่ยอมให้ผ่านไป ยังคงฟ้องให้ผู้ใช้ใส่ข้อมูลอยู่ นั่นคือโปรแกรมเห็นค่า "" เป็นค่า Null นั่นเอง

ฟังก์ชัน Nz() ก็เช่นกัน เพราะฟังก์ชั่น Nz() จะมองค่า "" ไม่เหมือนกับค่า Null การใช้งานเราตัองมั่นใจว่าค่าที่เราต้องการจะใช้ Nz() ต้องเป็นค่า Null จริงๆ ไม่ใช่ค่า "" เช่น
?Nz(Null,0) = 0
?Nz("",0) = ""
จะเห็นว่าหากเราใช้ Nz() กับค่า String ที่เป็น "" ฟังก์ชั่น Nz() จะไม่ให้ค่าตามที่เราต้องการ
เรื่องของค่าว่าง ค่าศูนย์ ไม่มีค่า และการใช้ฟังก์ชั่นเกี่ยวกับการไม่ใส่ค่าต่างๆ เหล่านี้ต้องทดลองและศึกษาดูครับ มันมีอยู่เยอะเหมือนกันใน MS Access หลายคนตกม้าตายตรงการตรวจสอบค่าพวกนี้ จนทำให้โปรแกรมที่เขียนทำงานผิดพลาดแบบไม่รู้ตัว (ผมด้วยคนนึง) ผมเคยเขียนการทดสอบเล่นๆไว้ลองเทียบดูนะครับ เป็นตัวอย่าง
--------------------------------------------
Dim myVar As Variant
myVar = Null
 
If Isnull(myVar) Then        Return: True
If IsEmpty(myVar) Then       Return: False
If myVar = "" Then           Return: Null
If myVar = vbNullString Then Return: Null
If myVar = vbNullChar Then   Return: Null
If myVar = vbEmpty Then      Return: Null
If myVar & "" = "" Then      Return: True
If Nz(myVar) = "" Then       Return: True
If Len(myVar) = 0 Then       Return: Null
--------------------------------------------
Dim myVar As Variant
myVar = Empty
 
If Isnull(myVar) Then        Return: False
If IsEmpty(myVar) Then       Return: True
If myVar = "" Then           Return: True
If myVar = vbNullString Then Return: True
If myVar = vbNullChar Then   Return: False
If myVar = vbEmpty Then      Return: True
If myVar & "" = "" Then      Return: True
If Nz(myVar) = "" Then       Return: True
If Len(myVar) = 0 Then       Return: True
--------------------------------------------
Dim myVar As Variant
myVar = ""
 
If Isnull(myVar) Then        Return: False
If IsEmpty(myVar) Then       Return: False
If myVar = "" Then           Return: True
If myVar = vbNullString Then Return: True
If myVar = vbNullChar Then   Return: False
If myVar = vbEmpty Then      Return: False
If myVar & "" = "" Then      Return: True
If Nz(myVar) = "" Then       Return: True
If Len(myVar) = 0 Then       Return: True
--------------------------------------------
Dim myVar As Variant
myVar = vbNullString
 
If Isnull(myVar) Then        Return: False
If IsEmpty(myVar) Then       Return: False
If myVar = "" Then           Return: True
If myVar = vbNullString Then Return: True
If myVar = vbNullChar Then   Return: False
If myVar = vbEmpty Then      Return: False
If myVar & "" = "" Then      Return: True
If Nz(myVar) = "" Then       Return: True
If Len(myVar) = 0 Then       Return: True
--------------------------------------------
Dim myVar As Variant
myVar = vbNullChar
 
If Isnull(myVar) Then        Return: False
If IsEmpty(myVar) Then       Return: False
If myVar = "" Then           Return: False
If myVar = vbNullString Then Return: False
If myVar = vbNullChar Then   Return: True
If myVar = vbEmpty Then      Return: False
If myVar & "" = "" Then      Return: False
If Nz(myVar) = "" Then       Return: False
If Len(myVar) = 0 Then       Return: False
--------------------------------------------
Dim myVar As Variant
myVar = vbEmpty
 
If Isnull(myVar) Then        Return: False
If IsEmpty(myVar) Then       Return: False
If myVar = "" Then           Return: False
If myVar = vbNullString Then Return: False
If myVar = vbNullChar Then   Return: False
If myVar = vbEmpty Then      Return: True
If myVar & "" = "" Then      Return: False
If Nz(myVar) = "" Then       Return: False
If Len(myVar) = 0 Then       Return: False
--------------------------------------------
โพสต์นี้ได้รับคำขอบคุณจาก: ชีวิต ไม่สิ้นหวัง

2
:yuush:
Nz ( ตัวแปร, [ ค่าที่ต้องการแปลงถ้าตัวแปรนั้นเป็นค่าว่างหรือ Null ] )

Nz  คือ Function ที่ใช้แปลงค่าจากตัวแปร ถ้าค่านั้นว่าง หรือ Null ก็ให้แปลงค่านั้นเป็นจำนวนตามที่เรากำหนดครับ
เช่น
Nz(Field1,5) + Nz(Field2,5) สมมุติใน Field1 = Null และ Field2 = 2 ผลที่ได้ก็คือ 5 + 2 =  7 เป็นต้น
หรือจะแปลงค่าว่างหรือ Null เป็นข้อความก็ได้เหมือนกันคับ


แต่โดยปกติการนำไปใช้ที่เจอบ่อยๆก็คือการใช้ในการแปลงค่า Null เป็น 0 กันซะส่วนใหญ่ครับ และจำเป็นต้องใช้ถ้าท่าน สร้างการคำนวนบน Form เพราะถ้า textbox ในกรณีใช้การคำนวน textbox หลายๆตัว เช่น textbox1 + textbox2 +textbox3 ถ้า textbox ตัวใดตัวหนึ่งนั้นเป็นค่าว่าง มันจะแสดง Error ขึ้นมาทันที เพราะเหตุนี้ก็เลยนิยมใช้ Nz ในการดักจับ Error พวกนี้ไว้ด้วยครับ โดยใส่เป็น txtSum =  Nz(textbox1,0) + Nz(textbox2,0) + Nz(textbox3,0)

การใส่ Nz คือการกำหนด ให้ถ้า Field ใดๆ หรือ Control ใดๆ บน Form ที่มีค่าว่างหรือ Null ให้แปลงค่าเป็น 0 เพื่อไม่ให้เกิดการผิดพลาดในการคำนวน
การใส่ Nz ตัวอย่างในคิวรี่ถ้าต้องการ คำนวนโดยใช้ฟิวใด ก็ไปอ้างอิงเอาตรงนั้นเช่น
โพสต์นี้ได้รับคำขอบคุณจาก: ชีวิต ไม่สิ้นหวัง

3
ในหน้า คิวรี่ผมต้องใส่ตรงไหนครับ ขอดูตัวอย่างได้มั้ย

Nz ( variant, [ value_if_null ] )

เป็นการกำหนดให้ Nz แปลงค่าจากตัวแปร ถ้าค่านั้นว่าง หรือ Null ก็ให้แปลงค่านั้นเป็นจำนวนตามที่เรากำหนดครับ
เช่น
Nz(Field1,5) + Nz(Field2,5) สมมุติใน Field1 = Null และ Field2 = 2 ผลที่ได้ก็คือ 7 เป็นต้น
หรือจะแปลงค่าว่างหรือ Null เป็นข้อความก็ได้เหมือนกันคับ


แต่โดยปกติการนำไปใช้ที่เจอบ่อยๆก็คือการใช้ในการแปลงค่า Null เป็น 0 กันซะส่วนใหญ่ครับ และจำเป็นต้องใช้ถ้าท่าน สร้างการคำนวนบน Form เพราะถ้า textbox ที่ท่านใช้คำนวนนั้นเป็นค่าว่าง มันจะแสดง Error ขึ้นมาทันที เพราะเหตุนี้ก็เลยนิยมใช้ Nz ในการดักจับ Error พวกนี้ไว้ด้วยครับ

การใส่ Nz คือการกำหนด ให้ถ้า Field ใดๆ หรือ Control ใดๆ บน Form ที่มีค่าว่างหรือ Null ให้แปลงค่าเป็น 0 เพื่อไม่ให้เกิดการผิดพลาดในการคำนวน
การใส่ Nz ตัวอย่างในคิวรี่ถ้าต้องการ คำนวนโดยใช้ฟิวใด ก็ไปอ้างอิงเอาตรงนั้นเช่น
โพสต์นี้ได้รับคำขอบคุณจาก: ชีวิต ไม่สิ้นหวัง

4
อาจารย์ จริงๆอันนี้หนูทำตามในคลิปของอาจารย์อ่ะค่ะ แล้วมันติดปัญหานี้อยู่ ยังไงอาจารย์ช่วยไปไขข้อสงสัยในยูทูปให้หน่อยนะคะ คลิปอาจารย์เป็นประโยชน์ต่อหนูมาก แต่ตอนนี้หนูติดอยู่แค่จุดนั้นจุดเดียวเลยจริงๆค่ะ จะร้องไห้ละแก้ไม่ได้ (ที่อาจารย์บอกมาตามเม้นบน หนูลองแก้ไขแล้วนะคะ มันฟ้องว่า นิพจน์ FIFO ไม่ได้กำหนด อะไรซักอย่างนี้แหละค่ะ)
โพสต์นี้ได้รับคำขอบคุณจาก: ชีวิต ไม่สิ้นหวัง

5
ถ้าจะกำหนดให้ค่า Null เป็น 0 ก็ใช้
Val(Nz(DSum("[Que_Pro] * [Salepre_Pro]","tbl_OrderItemPro","ID_Pro=" & [Qry_TotalOut].[ID_Pro]), 0))
โพสต์นี้ได้รับคำขอบคุณจาก: ชีวิต ไม่สิ้นหวัง

6
ทำไงก็ไม่ยอมเป็น 0 ใช้ทั้ง IIf IsNull , Nz ก็ไม่ได้ เกี่ยวกับเวอร์ชั่น Access มั้ยคะ
โพสต์นี้ได้รับคำขอบคุณจาก: ชีวิต ไม่สิ้นหวัง

7
ก็ต้องดูว่าค่าในฟิลด์ไหนที่อาจจะเป็นค่า Null ได้ในฐานข้อมูลเรา แล้วทำให้การคำนวณอาจคำนวณค่ากับฟิลด์อื่นที่มีค่าไม่ได้ก็ให้ใส่ Nz() เข้าไปเพื่อทำให้มันสามารถคำนวณค่าได้ เช่นหากถ้าเป็นไปได้ทุกฟิลด์ในฐานข้อมูลเราจะเป็นค่า Null ได้ทั้งหมด เราก็ต้องใส่ทั้งหมดประมาณนี้ครับ

Val(DSum("Nz([Que_Pro]) * Nz([Salepre_Pro])","tbl_OrderItemPro","Nz(ID_Pro)=" & Nz([Qry_TotalOut].[ID_Pro])))

ซึ่งมันแล้วแต่การออกแบบฐานข้อมูลว่าเรากำหนดให้มันสามารถเกิดค่า Null ได้หรือไม่ในฟิลด์ครับ ปรับใช้ดู
โพสต์นี้ได้รับคำขอบคุณจาก: ชีวิต ไม่สิ้นหวัง

หน้า: [1]