แสดงกระทู้

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
ผมมีโค้ดตัวนึง ลองเอาโค้ดนี้ไปใช้ดู แต่ไม่ยืนยันนะครับว่าจะถูกต้อง 100% หรือไม่
โค๊ด: [Select]
Public Sub CutLastCRLF(aFullFileNM As String)
    Dim B As String * 1
    Dim S As String
    Dim L As Long

    Open aFullFileNM For Binary Access Read As #1
    Do Until EOF(1)
        Get #1, , B
        S = S & B
    Loop
    Close #1

    If Right(S, 3) <> vbCr & vbLf & vbNullChar Then
        Exit Sub
    End If

    S = Left(S, Len(S) - 3)

    On Error Resume Next
    Kill aFullFileNM

    On Error GoTo 0
    Open aFullFileNM For Binary Access Write As #1
    Put #1, , S
    Close #1
End Sub
จะเรียกใช้ก็สั่ง Call CutLastCRLF("Drive:\Path\File.txt") มันจะเขียนทับไฟล์เดิมครับ
โพสต์นี้ได้รับคำขอบคุณจาก: อุดมโชค สมหวัง

2
ในฟิลด์ 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
--------------------------------------------
โพสต์นี้ได้รับคำขอบคุณจาก: อุดมโชค สมหวัง

3
: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 ตัวอย่างในคิวรี่ถ้าต้องการ คำนวนโดยใช้ฟิวใด ก็ไปอ้างอิงเอาตรงนั้นเช่น
โพสต์นี้ได้รับคำขอบคุณจาก: อุดมโชค สมหวัง

5
โค้ดนี้พิมพ์ทุก Property ของทุก Control บนฟอร์มที่ระบุตามชื่อออกเท็กซ์ไฟล์ แต่บาง Property อ่านค่าได้เฉพาะเมื่อเปิดฟอร์มใน Design View มั่ง หรือใน Form View มั่ง ดังนั้นผลลัพธ์จึงอาจแตกต่างเมื่อฟอร์มเปิดใน View ที่ต่างกัน และเพื่อไม่ให้เกิด Runtime Error เมื่ออ่าน Property ตัวไหนไม่ได้ จึงใส่ On Error Resume Next เพื่อข้ามตัวนั้นไป

โค๊ด: [Select]
Public Sub DumpProp()
    Dim obj, prop, str As String
   
    On Error Resume Next
    For Each obj In Forms("ชื่อฟอร์ม")
        For Each prop In obj.Properties
            str = str & vbCrLf & obj.Name & vbTab & prop.Name & vbTab & prop.Value
        Next
    Next
   
    Open "ชื่อพาธและไฟล์.txt" For Output As #1
    Print #1, str
    Close #1
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: อุดมโชค สมหวัง

6
ขอขอบคุณ อ.สุภาพ เหยียดรัมย์(yeadram) ที่ได้ส่งต่อเพื่อรักษาเว็บบอร์ดคลังความรู้ Access แห่งนี้ใว้ครับ

ขอขอบคุณ คุณธัชชัย(OddyWriter)และทุกท่านที่ซื้อหนังสือเพื่อเว็บ เพื่อเป็นกำลังสนับสนุนมากๆเลยครับ

ขอบคุณเว็บบอร์ดต่างๆ ThaiSEOBoard.com,welovethailand,thaicreate,Thaiadmin,JustUsers.net การให้คือสิ่งที่เรามีเหมือนกัน,pordoo,IndyTheme,Simple Machines Forum และ Google ที่ช่วยทำให้เว็บบอร์ดใหม่นี้สมบูรณ์ขึ้นมาครับ

รวมถึงขอบคุณทุกท่านทุกคนที่ยังคงเข้ามาใช้เว็บบอร์ดเรียนรู้ Access สำหรับคนไทยแห่งนี้  :grin:
แค่มีคนเปิดหน้าเว็บเข้ามาก็เป็นกำลังใจให้อยากเก็บรักษาเว็บบอร์ดแห่งนี้ต่อไปอีกนานๆแล้วครับ :fake smile:
โพสต์นี้ได้รับคำขอบคุณจาก: อุดมโชค สมหวัง

7
เนื่องด้วยโฮสที่เช่าเดิมอยู่นั้นกำลังจะหมดอายุสัญญา ผมจึงได้เช่า/ทำบอร์ดใหม่บนโฮสใหม่ขึ้นมา
จึงจะขอให้ช่วยรณรงค์ตั้งกระทู้ถามที่"เว็บบอร์ดใหม่"นี้นะครับ
ไฟล์ดาต้าเบสบอร์ดเดิมจะได้ไม่มีการเปลี่ยนแปลง(ซึ่งเดียวจะเขาไปล็อคไม่ให้โพสได้ล่ะ)
เพื่อที่จะได้ให้โฮสเดิมแบ็คอัพ -> ผมรับไฟล์มา -> ส่งต่อโฮสใหม่ -> โฮสติดตั้ง-ตั้งค่าเบื้องต้น -> ตรวจสอบการตั้งค่า/ทดลองใช้งาน -> ใช้งานจริง(หลังบ้าน)

ชวนๆกันมาใช้นะครับ :prettiness:  / หรือติดขัดตรงไหนโพสแจ้งมาเลยจ้าา  :miao:
โพสต์นี้ได้รับคำขอบคุณจาก: อุดมโชค สมหวัง

หน้า: [1]