ค้นหาข้อมูลไม่ให้ออกนอกขอบเขตที่กรองแล้ว



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

21 ก.ค. 64 , 09:01:27
อ่าน 217 ครั้ง

001Jetnipit

เมื่อผมกรองข้อมูลมาแล้วอยากให้มันค้นหาข้อมูลที่กรองเท่านั้นครับไม่ใช่ค้นหาจากตาราง ไม่ทราบว่าต้องเขียน VBA อย่างไรหรอครับ ขอบคุณครับ








โค้ดปุ้ม Search ครับ

 

21 ก.ค. 64 , 10:13:57
ตอบกลับ #1

PNR

สามารถใช้ 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
« แก้ไขครั้งสุดท้าย: 21 ก.ค. 64 , 10:21:05 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

21 ก.ค. 64 , 10:49:40
ตอบกลับ #2

001Jetnipit

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

หรือใช้การค้นหาแบบ multiple Criteria ก็ได้ครับผมว่ามันสะดวกดีนะเช่น
โดยสร้าง Sub ไว้เรียกใช้เช่น
Sub SearchCriteria

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




 

21 ก.ค. 64 , 10:57:08
ตอบกลับ #3

PNR

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

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

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

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

ท่านสามารถุ Copy Code มาวางในนี้เพื่อง่ายต่อการช่วยแก้ไขมากกว่ารูปนะครับ
« แก้ไขครั้งสุดท้าย: 21 ก.ค. 64 , 11:10:43 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

21 ก.ค. 64 , 11:16:00
ตอบกลับ #4

001Jetnipit


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

เหมือนมันทำงานค้นหาแต่ใน Textbox แต่ไม่กรอง Combobox ครับ





« แก้ไขครั้งสุดท้าย: 21 ก.ค. 64 , 11:23:05 โดย 001Jetnipit »

 

21 ก.ค. 64 , 11:20:25
ตอบกลับ #5

PNR

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

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

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

21 ก.ค. 64 , 11:24:20
ตอบกลับ #6

001Jetnipit

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


รบกวนพี่ดูการตอบกลับก่อนหน้าของผมอีกทีครับ เหมือนมันยังไม่ Success ครับ

 

21 ก.ค. 64 , 11:30:03
ตอบกลับ #7

PNR

อ่อเดียวแก้ให้ใหม่ครับ ชื่อถ้าพิมพ์ไม่เหมือนทุกตัวมันจะไม่ขึ้น ถ้าจะให้พิมพ์แค่บางตัวแล้วขึ้น ต้องใบ้ 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, "*") & "'"
« แก้ไขครั้งสุดท้าย: 21 ก.ค. 64 , 11:45:28 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

21 ก.ค. 64 , 11:47:35
ตอบกลับ #8

001Jetnipit

อ่อเดียวแก้ให้ใหม่ครับ ชื่อถ้าพิมพ์ไม่เหมือนทุกตัวมันจะไม่ขึ้น ถ้าจะให้พิมพ์แค่บางตัวแล้วขึ้น ต้องใบ้ 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, "*") & "'"

อันนี้ใส่แค่ปุ่ม Search หรือว่าใส่กับทุก Combobox ด้วยหรอครับ

 

21 ก.ค. 64 , 11:50:47
ตอบกลับ #9

PNR


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

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

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

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

21 ก.ค. 64 , 11:54:24
ตอบกลับ #10

001Jetnipit


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



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


 

21 ก.ค. 64 , 11:56:43
ตอบกลับ #11

PNR


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



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


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

21 ก.ค. 64 , 12:00:07
ตอบกลับ #12

001Jetnipit

จากโค้ดที่ให้ไป แก้ชื่อตารางจาก mytable เป็น ptt ก้อนครับผมลืมแก้ให้ :prettiness: :prettiness:

ได้แล้วครับพี่สุดยอดเลยครับ
เดี๋ยวตอนบ่ายผมมาถามเรื่องตั้งกระทู้ถามเรื่อง MsgBox ใน กรณีที่ใช้ Sub อีกครับนะครับขอบคุณครับ

 
โพสต์นี้ได้รับคำขอบคุณจาก: PNR


บอร์ดเรียนรู้ Access สำหรับคนไทย