แสดงกระทู้

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 - TTT

หน้า: 1 2 3 [4] 5 6 7
49
ลองศีกษากระทู้นี้ดูครับ ว่าตรงไม๊
http://www.thai-access.com/topic_post.asp?CategoryID=1&TopicID=3065&PagePosition=1

50
ในฟิลด์ 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
--------------------------------------------

52
ถ้าจะกำหนดให้ค่า Null เป็น 0 ก็ใช้
Val(Nz(DSum("[Que_Pro] * [Salepre_Pro]","tbl_OrderItemPro","ID_Pro=" & [Qry_TotalOut].[ID_Pro]), 0))

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

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

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

54
หากคำสั่งอยู่ที่ฟอร์มหลัก ต้องโฟกัสที่ซับฟอร์มก่อนแล้วค่อยโฟกัสที่คอนโทรลซับฟอร์มอีกครั้ง

Forms![เมนฟอร์ม]![ซับฟอร์ม].SetFocus
Forms![เมนฟอร์ม]![ซับฟอร์ม].Form.[คอนโทรล].SetFocus

เป็น
Forms![Frm_Main]![Frm_Sub].SetFocus
Forms![Frm_Main]![Frm_Sub].Form.[Text1].SetFocus
หรือแบบนี้ก็ได้
Me("Frm_Sub").SetFocus
Me("Frm_Sub").Form.Text1.SetFocus

ปรับใช้ดูครับ

55
คิดว่าที่คุณเขียนไว้ตั้งแต่แรกก็ใช้ได้แล้วมั้งครับ แต่ให้ต่อฟิลด์ลงไปเพิ่ม ประมาณนี้

select * from table_a
where charge & code not in(select charge & code from Table_b)

ไม่รู้ว่าเข้าใจความต้องการของคุณถูกไม๊นะครับ

ปล. การใช้ซับคิวรี่ หากข้อมูลมีจำนวนมากๆ จะทำให้คำนวณได้ช้า

56
ห้อง MS Access / : สร้างริบบอน ใช้เอง
« เมื่อ: 08 ส.ค. 61 , 20:13:12 »
แนะนำอ่านที่นี่ครับ มีหมดว่าจะทำเมนูประเภทไหน
Accessribbon link
ส่วนนี่เป็นไฟล์ตัวอย่างเมนูที่ผมเคยทำเป็นเมนูที่แสดงเป็นรูปภาพสมาชิกแต่ละคนได้ผมทำเป็นไฟล์ไว้ที่นี่ครับ เรียกไฟล์ BNK48-Update.accde ดูโค้ดที่เป็น xml ได้ที่ตาราง UsysRibbons ส่วนโค้ดที่เป็น VBA ศึกษาดูที่เว็บข้างบนได้ ผมก็ใช้โค้ดจากเว็บข้างบนนี้ทั้งหมดครับ
โหลดไฟล์ BNK48 link

57
ใช้อังกฤษตัวเล็กแล้วเข้าฟังก์ชั่น UCase() ก็จะเป็นตัวใหญ่ทั้งหมดครับ

58
เท่าที่ดูแนวคิดคุณก็น่าจะใช้ได้นะครับ ยังไม่ได้ลองนะคิดเอาเอง เพียงแต่เท่าที่เห็น Public strInvid As String และ Public strsearch_Invid As String ถ้าประกาศอยู่ที่ฟอร์ม Clase ของ Moudle จะมองไม่เห็นนะครับ ต้องไปประกาศที่ Module ที่เดียวกับฟังก์ชั่นแทน

59
ห้อง MS Access / : ทศนิยม
« เมื่อ: 21 ก.ค. 61 , 13:40:31 »
อาจเป็นเรื่องของการปัดเศษ ยังไงลองอ่านกระทู้นี้ดูครับ
กระทู้ปัดเศษ

60
คือกรณีนี้ หากต้องการแสดงสถานะภาษาคีย์ พอเรากำหนดให้ปุ่ม (~ tilde) เป็นปุ่มเปลี่ยนภาษาจะทำให้ปุ่มมันไม่สามารถ Active กับโปรแกรมอื่นๆได้ โปรแกรมอย่าง MS Access ให้การรันโค้ดที่เหตุการณ์เป็นหลัก Event-Driven แต่เมื่อกดปุ่มตัวหนอนแล้วไม่เกิดเหตุการณ์ใดๆ จึงไม่สามารถรันโค้ดที่ต้องการให้แสดงสถานะคีย์ได้ จึงต้องใช้เหตุการณ์ On Time แทนครับ แล้วก็ให้รันโค้ดที่ On Time แทน ถึงจะแสดงได้แบบ Real Time โดยไม่ต้องพึ่งเหตุการณ์ใดๆ ลองดูไฟล์ต้วอย่างที่นี่ครับ กดโหลดไฟล์ตัวอย่าง link

61
ห้อง MS Access / : query หลายตัว
« เมื่อ: 14 ก.ค. 61 , 13:01:14 »
ให้เรียงข้อมูลประมาณไฟล์ที่แนบมาแบบนี้หรือป่าวครับ?
คิวรี่ชื่อ: อย่างนี้หรือป่าว

62
ลองแทรกบรรทัดสีแดงนี้เข้าไปที่โค้ด แนวคิดคือใช้การตรวจสอบว่า ถ้าเซล A1 มีข้อความเหมือนชื่อหัวเรื่องอยู่แล้วก็ให้ข้ามการแทรกเซลไป อะไรประมาณนี้ครับ

    Set xlSheet = xlWorkbook.ActiveSheet
    '-------------ตรวจสอบหากมีหัวเรื่องชื่อเดียวกันซ้ำก็ให้ข้ามการแทรกไป
    If xlSheet.Cells(1, 1).Value = "ชื่อหัวเรื่องที่ต้องการ" Then Exit Sub
    '-------------------------------------------------
    With xlSheet.Range("A1")

63
ใช้แบบโค้ดแบบนี้น่าจะพอได้นะครับ
ในเหตุการณ์ After Update ของ TextBox
โค๊ด: [Select]
    Dim iStr As String
    iStr = Replace(TextBox, ",,", ",")
    iStr = Replace(TextBox, ", ,", ",")
    If Right(iStr, 1) = "," Then
        iStr = Mid(iStr, 1, Len(iStr) - 1)
    End If
    TextBox = iStr

64
จริงๆ ถ้าเป็นเลขบัตรประชาชน 13 หลัก ผมแนะนำให้ใช้เป็น EAN-13 ได้นะครับ มันจะสามารถ check digi หลักที่ 13 ของบัตรได้ด้วยว่าเลขที่บัตรใส่ถูกหรือไม่ เพราะเลขบัตรเราใช้ระบบ EAN-13 อยู่แล้ว

ส่วนเรื่องการไม่ต้องกด ENTER อย่างที่คุณ UN บอกอะครับ ตัวเครื่อง Barcode จะสามารถเซ็ทให้เมื่ออ่านเสร็จให้ส่งคีย์ ENTER ต่อท้ายได้เลย โดยส่วนมากจะอยู่ในคู่มือบาร์โค้ดที่ให้มา โดยจะเป็นรูปบาร์โค้ดแบบต่างๆ ให้เราใช้เครื่องยิงใส่บาร์โค้ดในคู่มือหัวข้อที่กำหนดเรื่องของการ ENTER เพียงครั้งเดียวก็จะเป็นการ Setup เครื่องยิงบาร์โค้ดแล้ว

แต่หากทำไม่ได้เพราะคู่มือหายหรือด้วยเหตุบางอย่างก็แนะนำให้ใช้เหตุการณ์ On Change ของ Textbox ตัวรับบาร์โค้ดครับ
    If Len(Me.Text1.Text) = 13 Then
        'โค้ดค้นหาข้อมูล ...
    End If

ประมาณนี้ครับ


หน้า: 1 2 3 [4] 5 6 7