search จาก combox
กระทู้เก่าบอร์ด อ.Yeadram

 2,676   16
URL.หัวข้อ / URL
search จาก combox

ขอปรึกษาเรื่องการทำให้ combo box สามารถค้นหารายการได้จากหลาย field
คือว่าผมมี combobox ที่ให้ user เลือกก่อนตัด stock ยา เช่น amx5,bhx,prctm5
ซึ่งหมายถึงยา Amoxicillin 500 mg ,Bromhexine,Paracetamol 500 mg ปัญหาคือ user จำรหัสไม่ได้ ก็เลยต้องการให้ Combobox สามารถค้นได้ทั้ง รหัส ชื่อยา และ Barcode ( 3 field) แล้ว List ชื่อยามาให้ครับ ขอบคุณครับ

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

1 @R17874
ดูคำตอบที่ R13742 ใน http://www.thai-access.com/yeadram_view.php?topic_id=2969&page=1 วิธีการเดียวกันครับ
2 @R17877
ได้แล้วครับอาจารย์ ขอบคุณครับ
3 @R17886
เจอปัญหาครับ เวลา combobox ค้นหาเจอ สมมุติว่าเจอ 5 รายการ ผมจะต้องกด ปุ่มลูกศรลง เพื่อเลือกรายการ ปรากฏว่า combobox จะแสดงค่าเป็นรายการแรกเท่านั้น เช่น ผมต้องการเลือกรายการที่ 3 พอกดปุ่มค่า List จะแสดงแต่รายการแรก แก้ไขยังไงครับ
4 @R17888
เอาโค้ดมาให้ดูหน่อยครับ แล้ว ColumnCount, ColumnWidth, ControlSource และ BoundColumn property ของคอมโบบ็อกซ์นี้มีค่าเป็นเท่าไหร่ แล้ว AutoExpand กำหนดเป็น No ด้วยนะครับ ลืมบอกไป
5 @R17891
Private Sub Combo18_KeyUp(KeyCode As Integer, Shift As Integer)

Me.Combo18.RowSource = "SELECT Inventory.DrugID, Inventory.DrugName, Inventory.GenericName, Inventory.SalePrice AS ราคาขาย, Inventory.CrudePrice AS ราคาทุน FROM Inventory WHERE (((Inventory.DrugID) like (Forms!FormPayOut!Combo18.Text)&'*')) or (((Inventory.DrugName) like '*'&(Forms!FormPayOut!Combo18.Text)&'*')) or (((Inventory.GenericName) like '*'&(Forms!FormPayOut!Combo18.Text)&'*')) ORDER BY Inventory.[DrugID]; "
Me.Combo18.Dropdown

End Sub

จากรูป รหัสยา คือ Combo18
รูปที่ 1 เมือพิมพ์ amoxy จะมี List ให้เลือกหลายรายการ ซึ่งถูกต้องแล้ว
รูปที่ 2 เมือเลื่อนลูกศรเพื่อเลือกรายการที่ต้องการคือรายการที่สาม มันต้องผ่านรายการแรก ซึ่ง List ก็จะเปลี่ยนเป็นแค่ 1 รายการ (ไม่สามารถเลือกรายการที่ 3 ได้ ยกเว้นใช้ mouse) ครับ
6 @R17892
http://imagizer.imageshack.us/v2/800x600q90/15/qbcj.jpg
http://imagizer.imageshack.us/v2/800x600q90/812/f3ag.jpg
7 @R17894
ถามอีกทีครับ

ColumnCount, ColumnWidth, ControlSource และ BoundColumn property ของคอมโบบ็อกซ์นี้มีค่าเป็นเท่าไหร่ แล้ว AutoExpand กำหนดเป็น No ด้วยหรือไม่
8 @R17895
ColumnCount=5
ColumnWidth=2cm;8cm;8cm;2cm;2cm
ControlSource=DrugID
BoundColumn=1
AutoExpand=Yes ครับ
9 @R17896
AutoExpand กำหนดเป็น No ก่อน แล้วทดลองดูครับ
10 @R17897
ให้ผลเหมือนกันครับอาจารย์
11 @R17901
จาก R17891 Source code ที่เขียนมา ไม่น่าจะถูกนะครับ
1. ทำไมวางไว้ที่ event Combo18_KeyUp
2. ทำไม row source อ้างถึงตัว combo เอง like (Forms!FormPayOut!Combo18.Text)
12 @R17903
ลองเพิ่มเข้าไปในโค้ดนะครับ

Option Compare Database
Option Explicit

Dim IsCharKeyPressed As Boolean

Private Sub Combo18_KeyDown(KeyCode As Integer, Shift As Integer)
    IsCharKeyPressed = False
End Sub

Private Sub Combo18_KeyPress(KeyAscii As Integer)
    IsCharKeyPressed = True
    If KeyAscii = vbKeyEscape Or KeyAscii = vbKeyTab Then
        IsCharKeyPressed = False
    End If
End Sub

Private Sub Combo18_KeyUp(KeyCode As Integer, Shift As Integer)

    If Not IsCharKeyPressed Then Exit Sub
    
    Me.Combo18.RowSource = "....."
    Me.Combo18.Dropdown
End Sub
13 @R17906
จะลองปรับดูครับ แล้วจะมารายงานผล ขอบคุณมากๆครับ
14 @R17914
สุดยอดครับ!! ได้ตามที่ต้องการเลย
รบกวนอาจารย์ใส่คำอธิบาย code ให้หน่อยครับ เป็นความรู้ (พอดีไม่ได้จบด้านคอมพิวเตอร์มาครับ แต่ชอบ database เลยศึกษาด้วยตนเองมาตลอด) ขอบคุณมากครับ
15 @R17915
เราต้องการให้ลิสท์บ็อกซ์ของคอมโบบ็อกซ์มีค่าตาม string ที่เราป้อนในส่วนเท็กซ์บ็อกซ์ของคอมโบบ็อกซ์ แนวคิดก็คือเมื่อกดตัวอักษรใดๆแล้ว เราก็ไปสร้างคำสั่ง SQL SELECT statement ให้ตรงตามเงื่อนไขที่ต้องการ แล้วกำหนดลงเป็นแหล่งข้อมูลของลิสท์บ็อกซ์ของคอมโบบ็อกซ์ทุกๆครั้งที่ตัวอักษรมีการเปลี่ยนแปลง เราก็ต้องหา event ที่มันเหมาะสม

ผมใช้ 3 event คือ
- Key_Down เกิดตอนเราเริ่มกดคีย์บอร์ด แต่ยังไม่ปล่อยนิ้ว ไม่ว่าจะคีย์ใดๆก็ตามบนคีย์บอร์ด
- Key_Press เกิดตอนที่เรากดเฉพาะตัวอักษร ถ้ากดอย่างอื่นเช่น ลูกศรขึ้น, คีย์ Home เหล่านี้จะไม่เกิด event นี้ แต่มีข้อยกเว้นตรงที่คีย์ escape กับคีย์ tab ดันก่อให้เกิด event นี้ด้วย
- Key_Up เกิดตอนเราปล่อยนิ้วออกจากคีย์บอร์ดใดๆที่เรากดไป ดังนั้น KeyDown และ Key_Up เกิดเสมอ แต่ Key_Press อาจเกิดหรือไม่ก็ได้

แต่ Key_Down และ Key_Press จะยังไม่ให้ค่าของ .Text ที่ถูกต้อง ผมก็เลือกใช้ Key_Up event แทน แต่ผมก็ไม่ต้องการให้การกดคีย์ที่ไม่ใช่ตัวอักษรมากระตุ้นให้เกิดการสร้าง SQL SELECT statement ผมเลยต้องให้แน่ใจว่าคีย์ที่กดไปเป็นตัวอักษรจริงๆ ผมก็ดักเช็คที่ Key_Down และ Key_Press event ครับ เท่านั้นเอง
16 @R17916
ได้ความรู้เยอะเลยครับ ขอบคุณมากๆ ครับ อ.สันติสุข
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3491s