แสดงกระทู้

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 - 001Jetnipit

หน้า: [1] 2
1
เนื่องจากภาษาไทยมักมีปัญหากับระบบ VBA และฐานข้อมูล
ดังนั้นแนะนำให้เปลี่ยนชื่อไฟล์เป็นภาษาอังกฤษครับ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

2
ใช้ตัวลูกน้ำ , แล้วก็เพิ่มตัวปิดท้ายไปด้วย ,"-")
โค๊ด: [Select]
=IIf([ptts1_Exp]-Date()<90,IIf([ptts1_Exp]-Date()>30,"หมดอายุภายใน 3 เดือน","-"),"-")
ที่มา https://www.thai-access.com/index.php?topic=567.msg2498#msg2498
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

3
เพิ่มโค้ดแบบนี้ จากเดิมมีอันเดียวคือ Dim sql As String ใส่  Dim rstRecords As Recordset เพิ่มเข้าไป
Dim sql As String
Dim rstRecords As Recordset

ทีนี้เป็นตัวนี้ครับ ลองประกาศชื่อนี้ As String แต่ไม่ได้ครับ



ตัวนี้ as long ก็ได้คับ
ถ้าน้าย้อนกลับไปดูโพสดีๆ ผมแก้ให้แล้วนะครับ

https://www.thai-access.com/index.php?topic=1722.msg7425#msg7425
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

4
ยังไม่ได้ประกาศตัวแปร

ต้องประกาศยังไงหรอครับ

เพิ่มโค้ดแบบนี้ จากเดิมมีอันเดียวคือ Dim sql As String ใส่  Dim rstRecords As Recordset เพิ่มเข้าไป
Dim sql As String
Dim rstRecords As Recordset
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

5
ยังไม่ได้ประกาศตัวแปร
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

6
แก้โค้ดเป็น
โค๊ด: [Select]
Private Sub Searchcriteria()
Dim sql As String
Dim FindRecordCount  As Long
Dim rstRecords As Recordset
sql = "SELECT * FROM Ptt WHERE [Name] like '*" & Nz(Me.TextSearch, "*") & "*' and [Sex] like '" & Nz(Me.Combo1, "*") & "' and [Dep] like '" & Nz(Me.Combo2, "*") & "' and [Age]  like '" & Nz(Me.Combo3, "*") & "'"
Set rstRecords = CurrentDb.OpenRecordset(sql)
forms!.....................recordsource = sql
forms!.....................Requery

        If rstRecords.EOF Then
            FindRecordCount = 0
        Else
            rstRecords.MoveLast
            FindRecordCount = rstRecords.RecordCount
        End If
   If FindRecordCount = 0 Then
   MsgBox "Not Found !!", vbCritical, "Status"
   End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

7

แก้ใน private sub SearchCriteria ครับ



ขึ้นแบบนี้ตอนเปิดครับครับเพราะผมใช้ Form_Load รัน SearchCriteria ด้วยครับ


จากโค้ดที่ให้ไป แก้ชื่อตารางจาก mytable เป็น ptt ก้อนครับผมลืมแก้ให้ :prettiness: :prettiness:
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

8

แก้ใน private sub SearchCriteria ครับ

ส่วนที่ปุ่มแล้วแต่คุณอยากว่าให้มันต่อเนื่องกันใหม

หรือถ้าอยากค้นหาแบบเดี่ยวๆ ก็ใส่ โค้ดที่ปุ่ม
โดยแก้ sql เป็น

โค๊ด: [Select]
sql = "SELECT * FROM ptt WHERE [Name] like '*" & Nz(Me.TextSearch, "*") "'"
ก็พอ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

9
อ่อเดียวแก้ให้ใหม่ครับ ชื่อถ้าพิมพ์ไม่เหมือนทุกตัวมันจะไม่ขึ้น ถ้าจะให้พิมพ์แค่บางตัวแล้วขึ้น ต้องใบ้ Like  เข้ามาเพิ่ม เดี่ยวแก้ให้

แก้เป็นแบบนี้ครับ
โค๊ด: [Select]
sql = "SELECT * FROM Mytable WHERE [Name] like '*" & Nz(Me.TextSearch, "*") & "*' and [Sex] like '" & Nz(Me.Combo1, "*") & "' and [Dep] like '" & Nz(Me.Combo2, "*") & "' and [Age]  like '" & Nz(Me.Combo3, "*") & "'"
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

10
Msgbox กรณีไหนครับ ?

เช่น แจ้งว่า ไม่พบข้อมูล
     แจ้งว่าเจอข้อมูล  จำนวน .... รายการ
     แจ้งว่า........

หรือการแจ้งกรณีที่ยังไม่ได้กรอกชื่อให้กรอกก่อนก็ใช้แบบนี้
Private CmdSearch_Click
if isnull(me.textsearch) then
MsgBox "กรุณาใส่ชื่อก่อน", vbInformation, "สถานะการค้นหา"
else
Cbosex = null
cboAge = null
cboDep = null
SearchCriteria
end if
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

11
seachcombo คืออะไรเอาออกได้ไหม

เหมือนมันทำงานซ้ำซ้อนกันอยู่

และตรง CmdSearch_Click เอาโค้ดออกให้หมดให้เหลือแค่
SearchCriteria พอ ถ้าอยากให้ที่ปุ่ม ค้นหาหาเฉพาะชื่อ ไม่ให้เงื่อนไขของ อายุ เพศ และ แผนกเข้ามาเกี่ยวข้องก็กำหนดให้คอมโบบ๊อกอื่นๆ มีค่า null ก่อนได้เช่น
Private CmdSearch_Click
Cbosex = null
cboAge = null
cboDep = null
SearchCriteria
End Sub

หรือถ้าต้องการกำหนดการค้นหาเฉพาะตัวมันเองเวลากดค้นหา
ที่ Private CmdSearch_Click
ก็ไม่ต้องใส่ SearchCriteria เข้าไป
ใส่เฉพาะ Combobox ที่ใช้ในการค้นหาก็พอ

ท่านสามารถุ Copy Code มาวางในนี้เพื่อง่ายต่อการช่วยแก้ไขมากกว่ารูปนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

12
สามารถใช้ ApplyFilter หรือ Filter ก็ได้ครับ

หรือใช้การค้นหาแบบ multiple Criteria ก็ได้ครับผมว่ามันสะดวกดีนะเช่น
โดยสร้าง Sub ไว้เรียกใช้เช่น
Sub SearchCriteria
Dim sql as string
sql = "SELECT * FROM ptt WHERE [Name] like '" & Nz(Me.TextSearch, "*") & "' and [Sex] like '" & Nz(Me.CboSex, "*") & "' and [Dep] like '" & Nz(Me.CboDep, "*") "' and [Age] like '" & Nz(Me.CboAge, "*") & "'"
แล้วตามด้วยโค้ดเดิม
forms......................RecordSource = sql
forms.......................Requery
end sub

แล้วหา Event เช่น Call SearchCriteria เรียกใช้ได้เลยเช่น
1.ใส่ที่ปุ่ม Search  Event Click
2.ที่คอมโบบ๊อกทั้งสอง Event Afterupdate
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

13
งงตรง 2 GB ครับ คือขนาดสูงสุดในการแนบเข้า/ไฟล์รูป หรือ ขนาดฐานข้อมูลทั้งหมดต่อในไฟล์ Access เราครับ

ทั้งหมดคับ ไม่ใช่เฉพาะรูปภาพ
Table size = 2 gigabyte minus the space needed for the system objects
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

14
ที่ปุ่มปริ้นใส่แบบนี้ครับ โค้ดจะไปจับ ID ของแต่ละ Record ที่มีบนฟอร์ม มาแสดงในรายงานแบบเดียวกัน

โค๊ด: [Select]
Dim rsc As DAO.Recordset
Dim StrWhere As String
     Set rsc = Forms![Navigation_Form]![NavigationSubform]![PTT].Form.RecordsetClone
        rsc.MoveFirst
     Do While Not rsc.EOF
        StrWhere = StrWhere & " OR ID=" & rsc!ID
        rsc.MoveNext
     Loop
        If Len(StrWhere) > 0 Then
           StrWhere = Right(StrWhere, Len(StrWhere) - 4)
        End If
     DoCmd.OpenReport "ptt", acViewPreview, , StrWhere
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

15
อ่อ มันไม่ได้ใช้การ filter ข้อมูลนะครับ ใช้ bookmark ใช่ไหม
งั้นโค้ดเงื่อนไข ต้องแก้ เดี่ยวขอปรับแก้แปป
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

16
Set frm = Forms![Navigation_Form]![NavigationSubform]![PTT].Form

ผมลองสร้างให้อยู่ใน Navigation_Form ดูสามารถทำได้

เช็คการตั้งชื่อของฟอร์มแต่ละอันว่าตรงกันไหมกับโค้ดด้านบน
โดยการดูชื่อคลิ๊กที่กรอบของฟอร์มแล้วดูตรงชื่อ


ตัวอย่างการตั้งค่าด้านล่าง
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

หน้า: [1] 2