ต้องการค้นหาข้อมูลในตาราง แนะนำทีครับ
กระทู้เก่าบอร์ด อ.Yeadram

 14,468   75
URL.หัวข้อ / URL
ต้องการค้นหาข้อมูลในตาราง แนะนำทีครับ

ผมใช้กล่องคำสั่งผสม ติดต่อกับ data ชื่อบริษัทลูกค้า ซึ่งมีเยอะมาก ประมาณ หลายร้อย บริษัท

ผมต้องการที่จะพิมพ์ อักษรบางตัว แล้วให้แสดงขึ้นแบบเต็มเลยจะต้องใช้คำสั่ง หรือ ต้องตั้งค่าอย่างไรบ้างครับ



คือ อยากได้เหมือนคำสังในส่วน ของต้วค้นหาของ ตัวโปรแกรม access เอง ที่อยู่ด้านล่างนะครับ พิมพ์แล้วขึ้นอัฟเดทให้เลย


รบกวนช่วนแนะนำ หรือวิธี ด้วยนะครับ

ขอบคุณครับ

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

1 @R06889
ชื่อบริษัทของคุณปรับเปลี่ยนได้ไหม เพื่อไม่ให้คำ เช่นคำว่า "บริษัท" ปรากฏอยู่เป็นคำนำหน้าชื่อ โดยอาจทำได้ 2 วิธีคือ

1) เพิ่มอีกฟิลด์เพื่อเก็บคำนำหน้าชื่อเอาไว้ แล้วเมื่อต้องการชื่อบริษัทเต็มๆ ก็เอาฟิลด์คำหน้าชื่อ + ฟิลด์ชื่อบริษัท รวมออกมาเป็นผลลัพธ์

2) เอาคำนำหน้าชื่อไปต่อท้ายชื่อแทน โดยมีเครื่องหมาย เช่น , (colon) เป็นตัวคั่น ตย. "น้ำดัง จำกัด,บริษัท" แต่เวลาต้องการชื่อบริษัทจริงๆ ก็ต้องเขียนฟังก์ชั่นเพื่อเอาคำนำหน้าชื่อย้ายกลับมาอยู่ข้างหน้าชื่อให้ถูกต้อง

ด้วยวิธีนี้ คุณสามารถทำให้ combo box ของคุณค้นด้วยอักษรขึ้นต้นของชื่อบริษัทได้โดยอัตโนมัติโดยกำหนด
- Row Source property ให้เป็น SQL SELECT statement ที่เรียงตามฟิลด์ชื่อ เช่น
SELECT ชื่อฟิลด์ของชื่อบริษัท, ชื่อฟิลด์ของรหัสบริษัท FROM ชื่อเทเบิล ORDER BY ชื่อฟิลด์ของชื่อบริษัท
- Auto Expand property เป็น True/Yes
- Limit to List property เป็น True/Yes
- Column Count property เป็น 2
- Column Width property เป็น ;0 (Semicolon ตามด้วยเลขศูนย์)
- ใน AfterUpdate event ของ combo box ของช่อง "เลือกบริษัท" ก็ให้ใส่โค้ด

Dim RS As DAO.Recordset

Set RS = Me.RecordsetClone
RS.FindFirst "ชื่อฟิลด์ของชื่อบริษัท = """ & Me.ชื่อของcomboboxนี้.Column(1) & """ "
If Not RS.NoMatch Then Me.Bookmark = RS.Bookmark
RS.Close: Set RS=Nothing

- ใน AfterUpdate event ของฟอร์ม ให้ใส่โค้ด
Me.ชื่อของcombobox.Requery
2 @R06892
ถามเพิ่มเติม ถ้าทำเหมือน google เลยได้ไหมครับ เช่น พิมพ์แค่คำว่า น้ำ ก็จะแสดงชื่อบริษัททั้งหมดที่เกี่ยวกับน้ำได้ไหมครับ
3 @R06894
คือมีคนที่พบปัญหา เหมือนว่าจะเป็น bug ในการใช้ LIKE operator กับ wild card เพื่อค้นหาจากบางส่วนของคำที่เป็นภาษาไทย ดังนั้นผลที่ได้อาจไม่ได้ 100% ลองดูปัญหาได้จาก http://www.thai-access.com/yeadram_view.php?topic_id=1513

ถ้าพอจะยอมรับ bug นี้ได้ จะทำก็ทำได้ครับ โดย

1) ไม่ต้องย้ายคำนำหน้าชื่ออย่างที่ผมบอก

2) On Change event ของ combo box ของช่อง "เลือกบริษัท" ให้ใส่โค้ด

Me.ชื่อของcomboboxนี้.RowSource = "SELECT ชื่อฟิลด์ของชื่อบริษัท, ชื่อฟิลด์ของรหัสบริษัท FROM ชื่อเทเบิล WHERE ชื่อฟิลด์ของชื่อบริษัท LIKE ""*" & Me.ชื่อของcomboboxนี้.Text & "*"" ORDER BY ชื่อฟิลด์ของชื่อบริษัท"

Me.ชื่อของcomboboxนี้.DropDown

3) กำหนด property เหล่านี้ให้แก่ combo box
- Auto Expand property เป็น False/No
- Limit to List property เป็น False/No
- Column Count property เป็น 2
- Column Width property เป็น ;0 (Semicolon ตามด้วยเลขศูนย์)

4) ใน AfterUpdate event ของ combo box ของช่อง "เลือกบริษัท" ก็ให้ใส่โค้ด

Dim RS As DAO.Recordset

Set RS = Me.RecordsetClone
RS.FindFirst "ชื่อฟิลด์ของชื่อบริษัท = """ & Me.ชื่อของcomboboxนี้.Column(1) & """ "
If Not RS.NoMatch Then Me.Bookmark = RS.Bookmark
RS.Close: Set RS=Nothing

5) ใน AfterUpdate event ของฟอร์ม ให้ใส่โค้ด
Me.ชื่อของcombobox.Requery
4 @R06895
แก้ไข

RS.FindFirst "ชื่อฟิลด์ของชื่อบริษัท = """ & Me.ชื่อของcomboboxนี้.Column(1) & """ "

เปลี่ยนเป็น

RS.FindFirst "ชื่อฟิลด์ของรหัสบริษัท = """ & Me.ชื่อของcomboboxนี้.Column(1) & """ "
5 @R06900
ขอบคุณมากครับ

ผมลองใส่โค้ดข้อ 2 แล้วไม่ได้อะครับ มันขึ้น


ไม่ทราบว่าเป็นที่ตรงไหนครับ
โค้ดที่พิมพ์ครับ
Me.cboGoToCustomers.RowSource = "SELECT [Name_Cus],[Cus_Id] FROM Customer WHERE [Name_Cus] LIKE ""*" & Me.cboGoToCustomers.Text& "*"" ORDER BY [Name_Cus]"

รบกวนด้วยครับ

ขอบคุณครับ
6 @R06902
Me.cboGoToCustomers.Text &
ต้องมีช่องว่างระหว่าง .Text และ &
7 @R06904
ขอบคุณมากครับ

ได้ผลยังไงเดี่ยวมาอัฟเดทให้ทราบกันครับ
8 @R06905
ลองทำดูแล้ว ในฟอร์มเก่า ใส่แล้วขึ้น



แต่ถ้าสร้าง data ใหม่ไม่มีปัญหาครับ

กำลังหาวิธีแก้อยู่ครับ

ขอบคุณมากครับ คุณ สันติสุข
9 @R06906
คำสั่ง Me.cboGoToCustomers.RowSource = .... คุณใส่ไว้ใน event On Change หรือไม่ และมี event ไหนอีกบ้างที่มีการใช้ .Text
10 @R06907
ขออนุญาติ รบกวนดูให้ทีนะครับ
เพราะว่า บางทีมันก็ขึ้น บางทีก็ไม่ขึ้น ละครับ ตอนนี้

ตอนนี้เปลี่ยน Combo เป็น cboGoToCustomer แล้วครับ

Option Compare Database



Private Sub cboGoToCustomer_AfterUpdate()
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
rs.FindFirst "Cus_Id = """ & Me.cboGoToCustomer.Column(1) & """ "
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
cboGoToCustomer = ""
rs.Close: Set rs = Nothing
End If
End Sub

Private Sub cboGoToCustomer_Change()
Me.cboGoToCustomer.RowSource = " select Name_Cus,Cus_Id from Customers where Name_Cus like ""*" & Me.cboGoToCustomer.Text & "*"" order by Name_Cus"
Me.cboGoToCustomer.Dropdown
End Sub

Private Sub Close_Click()
On Error GoTo Err_Close_Click
    If Me.Dirty Then Me.Dirty = False
    DoCmd.Close
    
Exit_Close_Click:
    Exit Sub

Err_Close_Click:
    MsgBox Err.Description
    Resume Exit_Close_Click
End Sub

Private Sub Form_AfterUpdate()
Me.cboGoToCustomers.Requery
End Sub

Private Sub Save_Click()
On Error GoTo Err_Save_Click

    DoCmd.RunCommand acCmdSaveRecord

Exit_Save_Click:
    Exit Sub

Err_Save_Click:
    MsgBox Err.Description
    Resume Exit_Save_Click
    
End Sub



Private Sub Command79_Click()
On Error GoTo Err_Command79_Click


    DoCmd.GoToRecord , , acFirst

Exit_Command79_Click:
    Exit Sub

Err_Command79_Click:
    MsgBox Err.Description
    Resume Exit_Command79_Click
    
End Sub
Private Sub Main_Menu_Click()
On Error GoTo Err_Main_Menu_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "Main Menu"
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Main_Menu_Click:
    Exit Sub

Err_Main_Menu_Click:
    MsgBox Err.Description
    Resume Exit_Main_Menu_Click
    
End Sub
Private Sub cmdDeleteCustomers_Click()
On Error GoTo Err_cmdDeleteCustomers_Click
    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdDeleteRecord
    
Exit_cmdDeleteCustomers_Click:
    Exit Sub

Err_cmdDeleteCustomers_Click:
    MsgBox Err.Description
    Resume Exit_cmdDeleteCustomers_Click
End Sub
11 @R06908
เมื่อขึ้นไดอะล็อกซ์ว่าเกิดข้อผิดพลาดแล้ว ให้กดปุ่ม Debug แล้วช่วยดูทีครับว่า มันไปหยุดที่บรรทัดไหน

อีกอย่าง ลองเอาบรรทัด Me.cboGoToCustomers.Requery ออกดูครับ ว่าจะเกิดปัญหาอีกหรือไม่
12 @R06909


ผมใส่ ' ด้านหน้าทั้ง 2 บรรทัดแล้วมันไม่ขึ้นข้อความให้ครับ
13 @R06910
เอาออกแล้ว ก็ชี้มาที่บรรทัดเดิมครับ
14 @R06916
1) ไม่รู้ว่าใช่หรือไม่ บรรทัดที่เขียนว่า

Me.cboGoToCustomers.Requery

ทำไมมี s

2)
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
cboGoToCustomer = ""
rs.Close: Set rs = Nothing
End If

ที่ถูกต้องควรจะเป็น
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
cboGoToCustomer = ""
End If
rs.Close: Set rs = Nothing

3) หลังการแก้ไขโค้ด/ฟอร์ม ให้คอมไพล์ทุกครั้ง
15 @R06929
ขอบคุณ คุณสันติสุข มากครับ

ตอนนี้ใช้งานได้ ตามต้องการแล้วครับ

แต่

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

ผมต้องเพิ่มโค้ดหรือแก้ไขตรงไหนบ้างครับ


ขอบคุณครับ
16 @R06932
ผมไม่รู้ว่าทำไมยังขึ้น error มันไม่น่าจะเป็นแล้ว ส่วนถ้าต้องการเอาเลื่อนลูกศรขึ้นลงเพื่อเลือกข้อมูลได้ ให้เปลี่ยนจาก On Change event ไปเป็น KeyUp event แทน

อีกอย่างที่อยากบอกคือ มันอาจทำงานไ่ม่สมบูรณ์อย่างที่ใจเราอยากได้ไปทุกอย่างนะครับ ผมจะบอกเป็นแนวทางให้เท่านั้น ที่เหลือคุณต้องไปศึกษาเพิ่มเติมเอาเองว่า event อะไรเกิดอย่างไร นอกจากนี้ คุณควรทำการ debug โปรแกรมได้ด้วยตนเอง ลองไปศึกษาดูครับว่า debug โปรแกรมนั้นมีเครื่องมืออะไรให้เราใช้บ้าง มันจะทำให้คุณสามารถแก้ไขปัญหาได้ด้วยตนเองครับ
17 @R06933
ขอขอบคุณคำแนะนำ และแนวคิด มาก ๆ เลยครับ ที่ช่วยมาตั้งแต่ตั้งกระทู้แรก จนถึงตอนนี้ ส่วนที่เหลือ เดี่ยวผมลองหาวิธีแก้ไขดูก่อน ละกัน ถ้าติดปัญหาตรงไหนอีก ขอรบกวนอีกนะครับ

ไม่มีอะไรจะมอบให้นอกจากคำว่า ขอบคุณครับ ขอบคุณจากใจจริง

saknoi
18 @R06934
เมือย้าย โค้ดมา ที่ KeyUp event แล้ว ลองคลิกเมาส์ดู error หายแล้วครับ


ขอบคุณ อีกครั้งครับ
19 @R07439
สอบถามเพิ่มเติมครับ

ตอนนี้ ผมอยากให้ตัวคอมโบ สามารถค้นหาได้ 2 คอลัมน์ ไม่ว่าจะพิมพ์ คำที่ตรงกับคอลัมน์แรกหรือที่ 2 ก็สามารถแสดงผลได้เหมือนกันครับ



ส่วนโค้ดที่ใช้

Private Sub cboCustomer_KeyUp(KeyCode As Integer, Shift As Integer)
Me.cboCustomer.RowSource = " select CusName,CusID from Customers where CusName like ""*" & Me.cboCustomer.Text & "*"" order by CusName"
Me.cboCustomer.Dropdown
End Sub


อยากให้พิมพ์ คำที่ตรงกับ cusid ก็สามารถค้นหาได้ ตอนนี้สามารถค้นหาได้แต่ cusname ครับ

รบกวนด้วยครับ

ขอบคุณครับ
20 @R07440
ปรับปรุงเป็น

Me.cboCustomer.RowSource = "select CusName,CusID from Customers where (CusName like ""*" & Me.cboCustomer.Text & "*"") or (CusID like ""*" & Me.cboCustomer.Text & "*"") order by CusName"

ปล. ในนี้ก็ฝากรูปได้นะครับ อย่าฝากไว้ที่อื่นเพราะเหมือนจะเป็นการแฝงโฆษณาซึ่งผมว่าไม่เหมาะ และนานๆไปรูปเดิมก็หายไปแล้ว คนอื่นเข้ามาศึกษาก็อาจจะไม่สามารถทำความเข้าใจได้ กลายเป็นเสียเวลาและเสียประโยชน์โดยส่วนรวมไปนะครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3612s