ต้องการทราบวิธีการค้นหาหลายฟิลด์
กระทู้เก่าบอร์ด อ.Yeadram

 1,032   7
URL.หัวข้อ / URL
ต้องการทราบวิธีการค้นหาหลายฟิลด์

ผมต้องการเขียนโค๊ดค้นหาข้อมูลในฟิลด์ adviser_1 ถ้าไม่พบ ให้ไปค้นในฟิลด์ adviser_2 ถ้าไม่พบให้ไปค้นใน adviser_3
   คำสั่งผมทำด้านล่าง ไม่ได้ผลครับ ต้องแก้ไขอย่างไรครับ อาตารย์ทุกท่าน

Private Sub search_Click()
    DoCmd.GoToControl "adviser_1"
    DoCmd.GoToControl "adviser_2"
    DoCmd.GoToControl "adviser_3"
    DoCmd.FindRecord Forms![frm_room_number]!Text65, acAnywhere, False, acSearchAll, , acCurrent, True
End Sub

7 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R22071
ทำได้แล้วครับ ผมใช้แบบนี้ครับ
Private Sub search_Click()
    Dim strsearch As String
    Dim Task As String
    strsearch = Me.txtSearch.Value
    Task = "SELECT * FROM Adviser WHERE ((adviser_1 Like ""*" & strsearch & "*"") or (adviser_2 Like ""*" & strsearch & "*"") or (adviser_3 Like ""*" & strsearch & "*""))"
    Me.RecordSource = Task
    Me.txtSearch.SetFocus
End sub
2 @R22073
Code ล่าสุด เป็นคำตอบที่ไม่ตรงกับคำถามนะครับ

คำถามคือ ถ้าไม่พบใน adviser_1 ค่อยไปหาใน adviser_2, ...

แต่ code เป็นการค้นหาใน adviser_1, 2 และ 3 พร้อมๆ กัน

หรือว่าต้องการแบบนี้ครับ
3 @R22075
ผมลอง ค้นคำถามในนี้ครับ เลยลองปรับใช้ ก็ใช้ได้ครับ แต่จริงๆแล้ว อยากได้ Code ที่ตรงกับคำถามแหละครับอาจารย์ ไม่ทราบว่า จะเขียน Code อย่างไรครับ อาจารย์ PichaiTC
เพราะผมใช้แล้ว ปรากฏว่ามันกรองเอาเฉพาะข้อมูลที่ค้นหาตรงกัน ข้อมูลอื่นๆในฟอร์มที่ไม่ตรงกัน จะไม่เห็นเลย ต้องปิด-เปิดฟอร์มใหม่ เวลาจะค้นหาต่อไป งั้นต้องขอรบกวนอาจารย์เขียน Code ตามคำถามแรกน๊ะครับ
4 @R22092
แบบเข้าใจง่าย ๆ ก็ประมาณนี้ครับ
แต่ผมไม่เข้าใจที่คุณว่า
"ปรากฏว่ามันกรองเอาเฉพาะข้อมูลที่ค้นหาตรงกัน ข้อมูลอื่นๆในฟอร์มที่ไม่ตรงกัน จะไม่เห็นเลย"

ส่วน ที่ต้อง เปิด-ปิดฟอร์มทุกครััง
ลองเพิ่มคำสั่งนี้ครับ Me.Requery

Private Sub search_Click()
Dim strsearch As String
Dim Task As String
    strsearch = Me.txtSearch.Value
    
    
    If DCount("1", "Adviser", adviser_1 Like "" * " & strsearch & " * "") > 0 Then
        Task = "SELECT * FROM Adviser WHERE adviser_1 Like ""*" & strsearch & "*"
    Else
        If DCount("1", "Adviser", adviser_2 Like "" * " & strsearch & " * "") > 0 Then
            Task = "SELECT * FROM Adviser WHERE adviser_2 Like ""*" & strsearch & "*"
        Else
            If DCount("1", "Adviser", adviser_3 Like "" * " & strsearch & " * "") > 0 Then
               Task = "SELECT * FROM Adviser WHERE adviser_3 Like ""*" & strsearch & "*"
            End If
        End If
    End If

    Me.RecordSource = Task
    Me.Requery
    Me.txtSearch.SetFocus

End Sub
5 @R22095
อาจารย์ PichaiTC ครับ
แจ้ง error ว่า run-time error '13':
      Type mismatch
ที่เป็นสีเหลืองที่
If DCount("1", "Adviser", adviser_1 Like "" * " & strsearch & " * "") > 0 Then ครับ
6 @R22096
พอดีผมพิมพ์สด ไม่ได้ลอง code จริง ใน Access น่ะครับ

ลองแก้เป็น
    If DCount("1", "Adviser", "adviser_1 Like '*" & strsearch & "*'") > 0 Then
        Task = "SELECT * FROM Adviser WHERE adviser_1 Like '*" & strsearch & "*'"
    Else
        If DCount("1", "Adviser", "adviser_2 Like '*" & strsearch & "*'") > 0 Then
            Task = "SELECT * FROM Adviser WHERE adviser_2 Like '*" & strsearch & "*'"
        Else
            If DCount("1", "Adviser", "adviser_3 Like '*" & strsearch & "*'") > 0 Then
               Task = "SELECT * FROM Adviser WHERE adviser_3 Like '*" & strsearch & "*'"
7 @R22097
ได้แล้วครับอาจารย์ ขอบคุณมากครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2896s