กระทู้เก่าบอร์ด อ.Yeadram
2,226 11
URL.หัวข้อ /
URL
ต้องการสืบค้นได้ทั้งชื่อทั้งID ทำยังไงคะ
Private Sub Command24_Click()
' Find the record that matches the control.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[IDPatient] = '" & Me![txtsearch] & "'"
Me.Bookmark = rs.Bookmark
End Sub
ต้องการ สืบค้นได้ทั้งชื่อทั้งID ตรงโค้ด
rs.FindFirst "[IDPatient]= '" & Me![txtsearch] & "'"
ต้องใส่ NamePatient ตรงไหนอ่ะคะ หรือว่าแยกมาอีกช่องเซิร์ทนึง แล้วจะใช้เซิร์ทปุ่มเดียวกันก็ได้ค่ะ
' Find the record that matches the control.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[IDPatient] = '" & Me![txtsearch] & "'"
Me.Bookmark = rs.Bookmark
End Sub
ต้องการ สืบค้นได้ทั้งชื่อทั้งID ตรงโค้ด
rs.FindFirst "[IDPatient]= '" & Me![txtsearch] & "'"
ต้องใส่ NamePatient ตรงไหนอ่ะคะ หรือว่าแยกมาอีกช่องเซิร์ทนึง แล้วจะใช้เซิร์ทปุ่มเดียวกันก็ได้ค่ะ
11 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R19696
rs.FindFirst "[IDPatient]= '" & Me![txtsearch] & "'or [อีกฟิลด์]= '" & Me![txtsearch] & "'"
2 @R19697
แก้ไข : ก่อน or ให้มีช่องว่างด้วยครับ
3 @R19698
ทำได้หลายรูปแบบหลายคำสั่ง กรณีนี้เอาเฉพาะรูปแบบโค๊ดที่ จขกท ให้มานะครับ
แบบที่ อ.สันติสุข แนะนำ จะได้ประมาณนี้
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[IDPatient]= '" & Me![txtsearch] & "' OR [NamePatient]= '" & Me![txtsearch] & "'"
Me.Bookmark = rs.Bookmark
อีกแบบคือใช้ .NoMatch ก็ได้ครับ เช่น
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[IDPatient] = '" & Me![txtsearch] & "'"
If rs.NoMatch Then ' ถ้าไม่มีค่าที่ตรง ก็ให้หาในฟิลด์ NamePatient ต่อไป rs.FindFirst "[NamePatient] = '" & Me![txtsearch] & "'"
If rs.NoMatch Then ' ถ้ายังไม่ตรงอีก ก็แสดงข้อความ
MsgBox "ไม่พบข้อมูล"
Exit Sub
End If
End If
Me.Bookmark = rs.Bookmark
อีกทั้ง ถ้ากรณีเราต้องการหาทั้งฟิลด์ที่มี Data Type เป็นตัวเลข และตัวหนังสือในชื่อเดียวกันคือ txtsearch บนฟอร์ม ก็สามารถทำในรูปแบบของโค๊ดนี้ได้เช่นกัน
Dim rs As Object
Set rs = Me.Recordset.Clone
If IsNumeric(Me![txtsearch]) Then ' ตรวจสอบว่าค่าที่ใส่ในช่อง txtsearch เป็นตัวเลขทั้งหมดหรือไม่
rs.FindFirst "[IDPatient] = " & Me![txtsearch] ' ถ้าเป็นตัวเลข
Else
rs.FindFirst "[NamePatient] = '" & Me![txtsearch] & "'" ' ถ้าเป็นตัวอักษร
End If
If rs.NoMatch Then ' ถ้าไม่พบข้อมูลที่ตรงให้แสดง Msgbox
MsgBox "ไม่พบข้อมูลที่ต้องการ"
Exit Sub
End If
Me.Bookmark = rs.Bookmark
ลองปรับใช้ดูครับ พอดีเห็นว่าน่าจะเป็นประโยชน์กับผู้กำลังเริ่มต้นหลายๆคนนะครับ
แบบที่ อ.สันติสุข แนะนำ จะได้ประมาณนี้
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[IDPatient]= '" & Me![txtsearch] & "' OR [NamePatient]= '" & Me![txtsearch] & "'"
Me.Bookmark = rs.Bookmark
อีกแบบคือใช้ .NoMatch ก็ได้ครับ เช่น
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[IDPatient] = '" & Me![txtsearch] & "'"
If rs.NoMatch Then ' ถ้าไม่มีค่าที่ตรง ก็ให้หาในฟิลด์ NamePatient ต่อไป rs.FindFirst "[NamePatient] = '" & Me![txtsearch] & "'"
If rs.NoMatch Then ' ถ้ายังไม่ตรงอีก ก็แสดงข้อความ
MsgBox "ไม่พบข้อมูล"
Exit Sub
End If
End If
Me.Bookmark = rs.Bookmark
อีกทั้ง ถ้ากรณีเราต้องการหาทั้งฟิลด์ที่มี Data Type เป็นตัวเลข และตัวหนังสือในชื่อเดียวกันคือ txtsearch บนฟอร์ม ก็สามารถทำในรูปแบบของโค๊ดนี้ได้เช่นกัน
Dim rs As Object
Set rs = Me.Recordset.Clone
If IsNumeric(Me![txtsearch]) Then ' ตรวจสอบว่าค่าที่ใส่ในช่อง txtsearch เป็นตัวเลขทั้งหมดหรือไม่
rs.FindFirst "[IDPatient] = " & Me![txtsearch] ' ถ้าเป็นตัวเลข
Else
rs.FindFirst "[NamePatient] = '" & Me![txtsearch] & "'" ' ถ้าเป็นตัวอักษร
End If
If rs.NoMatch Then ' ถ้าไม่พบข้อมูลที่ตรงให้แสดง Msgbox
MsgBox "ไม่พบข้อมูลที่ต้องการ"
Exit Sub
End If
Me.Bookmark = rs.Bookmark
ลองปรับใช้ดูครับ พอดีเห็นว่าน่าจะเป็นประโยชน์กับผู้กำลังเริ่มต้นหลายๆคนนะครับ
4 @R19699
แล้วถ้าเป็นโค้ดนี้
Private Sub Command63_Click()
On Error Resume Next
Me.subtblDriver.Form.FilterOn = False
Me.subtblDriver.Form.Filter = Me.Combo64.Value & " = '" & Me.Text24.Value & "'"
Me.subtblDriver.Form.FilterOn = True
End Sub
แบบนี้ใส่ได้แต่ตัวอักษรอ่าค่ะ อยากได้โค้ดที่ใส่ได้ทั้งตัวอักษรและไอดี เหมือนกันค่ะ
ขอบคุณค่ะ
Private Sub Command63_Click()
On Error Resume Next
Me.subtblDriver.Form.FilterOn = False
Me.subtblDriver.Form.Filter = Me.Combo64.Value & " = '" & Me.Text24.Value & "'"
Me.subtblDriver.Form.FilterOn = True
End Sub
แบบนี้ใส่ได้แต่ตัวอักษรอ่าค่ะ อยากได้โค้ดที่ใส่ได้ทั้งตัวอักษรและไอดี เหมือนกันค่ะ
ขอบคุณค่ะ
5 @R19700
ไม่แน่ใจว่าคุณเข้าใจหรือไม่ว่า Filter property ต้องการค่าอะไร ? รูปแบบเป็นยังไง ?
แล้ว expression ที่บอกมา Me.Combo64.Value & " = '" & Me.Text24.Value & "'" มัน evaluate ค่าออกมาเป็นอะไร ลองยกตัวอย่างมาหน่อย
แล้ว expression ที่บอกมา Me.Combo64.Value & " = '" & Me.Text24.Value & "'" มัน evaluate ค่าออกมาเป็นอะไร ลองยกตัวอย่างมาหน่อย
6 @R19701
ต้องการทำช่องsearchโดยใช้combo box ให้เลือกระหว่าง Student ID กับ Student Name ค่ะ
Private Sub buttonsearch_Click()
On Error Resume Next
Me.subtblDriver.Form.FilterOn = False
Me.subtblDriver.Form.Filter = Me.combobox.Value & " = '" & Me.searchfor.Value & "'"
Me.subtblDriver.Form.FilterOn = True
ตอนนี้โค้ดนี้สามารถsearchได้แค่ชื่อ แต่ว่าต้องการให้สามารถsearchได้ทั้งไอดีและชื่อค่ะ
Private Sub buttonsearch_Click()
On Error Resume Next
Me.subtblDriver.Form.FilterOn = False
Me.subtblDriver.Form.Filter = Me.combobox.Value & " = '" & Me.searchfor.Value & "'"
Me.subtblDriver.Form.FilterOn = True
ตอนนี้โค้ดนี้สามารถsearchได้แค่ชื่อ แต่ว่าต้องการให้สามารถsearchได้ทั้งไอดีและชื่อค่ะ
7 @R19702
ช่วยตอบที่ผมถามด้วยครับ
8 @R19703
เพิ่งจะหัดโปรแกรมaccess จึงไม่ค่อยเข้าใจคำถามค่ะ ช่วยอธิบายคำถามอีกทีได้มั้ยคะ ขอบคุณค่ะ
9 @R19704
Filter property ต้องการ string expression ที่ใช้เป็นเงื่อนไขในการกรองให้ได้เรคอร์ดตรงตามที่ต้องการ ค่าของ string expression ที่ evaluate มานี้ จะเหมือนกับส่วนของ WHERE clause ใน SQL statement ดังนั้นผลลัพธ์ตรงนี้หลังจากที่ evaluate แล้วจึงต้องได้ string ที่มีค่าเป็น "ชื่อฟิลด์แรก = 'ค่า' or ชื่อฟิลด์สอง = 'ค่า' "
ทีนี้ก็แค่เอาชื่อฟิลด์ที่ถูกต้องใส่แทนลงไป ก็เท่านั้นเองครับ
ทีนี้ก็แค่เอาชื่อฟิลด์ที่ถูกต้องใส่แทนลงไป ก็เท่านั้นเองครับ
10 @R19708
อ่ออออ เข้าใจแล้วค่ะ ขอบคุณมากค่ะ
11 @R19710
ขอบคุณมากค่ะ
Time: 0.3174s