สอบถามเรื่อง combobox
กระทู้เก่าบอร์ด อ.Yeadram

 5,522   21
URL.หัวข้อ / URL
สอบถามเรื่อง combobox

คือว่าผมต้องการให้ใน combobox มีตัวเลือก All เพื่อเอาไว้คิวรี่หาข้อมูลที่มีทั้งหมดในตัวเลือกของ combobox   เช่น ในcombobox มีเพศ ชาย,หญิง ก็จะเลือกได้เฉพาะชาย หรือหญิง แต่ถ้าผมอยากได้ทั้งชายและ หญิงเลย จะเพิ่มตัวเลือก All ขึ้นมา ต้องทำยังไงบ้าง ช่วยหน่อยครับ

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

1 @R03075
ไม่มีใครตอบได้เลยหรือ
2 @R03077
กำหนดที่ ชนิดแหล่งข้อมูลแถว =Value List
กำหนด แหล่งข้อมูลแถว ="All";"ชาย";"หญิง"

ที่ Combobox สมมติ ชื่อเป็น Combo0 เขียนคำสั่ง

Private Sub Combo0_AfterUpdate()
if not isnull(combo0.value) then
      Select Case Combo0.ListIndex
              Case 0
'                   อยากทำอไรก็ได้ตามใจตัวเอง
                    MsgBox "ALL"
              Case 1
                   MsgBox "MALE"
              Case 2
                  MsgBox "FEMALE"
      End Select
end if
End Sub
3 @R03078
คือว่า เพศ ชายหญิงเนี่ยผมดึงมาจากตารางข้อมูลอะครับ เวลาเรา
       "คิวรี่" หาเพศ มันก็จะได้ แค่ชายกับหญิงเท่านั้นครับ แต่ว่าถ้าผมต้องการเลือกทั้งหมดอะครับ ทั้งชายและหญิง ครับ
นี่ คือ ที่ผม กำหนด แหล่งข้อมูลแถว= SELECT RELIGION.sex FROM RELIGION GROUP BY RELIGION.sex ;
ต้องเพิ่มยังไงบ้างครับ อธิบายหน่อยครับ แบบละเอียดนะ ผมไม่ค่อยเก่งอะครับ
4 @R03079
ถ้านำเข้า โดยกำหนด ชนิดแหล่งข้อมูลเป็น ตารางหรือแบบสอบถาม
- ต้องกำหนด "All" เข้าในฐานข้อมูล ด้วยครับ
ถ้านำเข้า โดยกำหนด ชนิดแหล่งข้อมูลเป็น Value List
- เขียน Code นำข้อมูลจากตารางมา Add เข้าใน Combobox แล้วเพิ่ม
All เข้าไป หรืออาจไม่เพิ่ม All กรณีมี All อยู่ในตารางอยู่แล้ว

   เขียนคำสั่ง เพิ่มเติม
   
Private Sub Combo0_AfterUpdate()
if not isnull(combo0.value) then
      Select Case Combo0.Value
              Case "All"
'                   อยากทำอไรก็ได้ตามใจตัวเอง
                    MsgBox "ALL"
              Case "ชาย"
                   MsgBox "MALE"
              Case "หญิง"
                  MsgBox "FEMALE"
      End Select
end if
End Sub
ไม่ทราบพอเข้าใจ Concept หรือเปล่าครับ
5 @R03080
เข้าใจแล้วครับ ขอบคุณมาก จะได้ไปประยุกใช้ครับ
6 @R03089
ขออนุญาตเพิ่มเติมครับ

การเพิ่ม "All" แบบลัด
กำหนดทุกอย่างตามที่??คยทำครับ ตรง Rowsource เขียนเป็น union query ดังนี้ครับ

SELECT "All" as sex FROM RELIGION
UNION
SELECT RELIGION.sex FROM RELIGION GROUP BY RELIGION.sex;

ลองดูครับ
7 @R21848
ลองทำตามนี้แล้ว เวลาเลือก All ไม่แสดงข้อมูลเลยครับ ไม่ทราบว่าเป็นเพราะเหตุใดครับ

SELECT "All" as sex FROM RELIGION
UNION
SELECT RELIGION.sex FROM RELIGION GROUP BY RELIGION.sex;

ของผมกำหนดที่ Rowsource เป็น
SELECT "All" as p_province FROM student_no Union SELECT student_no.p_province FROM student_no GROUP BY student_no.p_province;


และอีกอย่างผมไม่เข้าใจคำว่า - ต้องกำหนด "All" เข้าในฐานข้อมูล ด้วยครับ
8 @R21849


เลือกตัวอื่นๆ แสดงหมด ยกเว้น All
9 @R21854
คุณใช้โค้ด,คิวรี่อะไรบ้าง เพื่อที่เมื่อเลือกคำว่า "ชาย" แล้ว ข้อมูลในตารางทางฝั่งขวาถึงแสดงออกมาให้ตามต้องการ
10 @R21858
โค๊ด combo Box

Private Sub Cbofprovince_AfterUpdate()
DoCmd.Requery qrf_province_m1noi
End Sub

คิวรี่ ตามภาพครับ



กำหนดที่ Rowsource เป็น
SELECT "All" as p_province FROM student_no Union SELECT student_no.p_province FROM student_no GROUP BY student_no.p_province;



ส่วนคำว่าชาย หญิง รวม เป็นการนับว่า เมื่อเลือกจังหวัด เช่น ขอนแก่น จะมีชายหญิงกี่คน รวมเท่าไหร่ครับ

*****คือผมทดลองเอามาประยุกต์ใช้ ให้มีคำว่า All แล้วต้องการให้ตารางทางฝั่งขวา เมื่อ เลือก All จะขึ้นข้อมูลทุกจังหวัดครับ *****
11 @R21859
มันกลายเป็นภาพเดียวกันหมดเลย เอาใหม่ครับ
คิวรี่ ชื่อ qrf_province_m1noi ตามภาพครับ
12 @R21860
ตารางด้านขวาผูกเข้ากับคิวรี่ qrf_province_m1noi ซึ่งคิวรี่ก็มีเงื่อนไขเลือกเอาเรคอร์ดที่ฟิลด์จังหวัดมีค่าเท่ากับในคอมโบบ็อกซ์ ดังนั้นเวลาเลือกจังหวัดต่างๆ ตารางก็แสดงได้ถูกต้อง แต่พอเลือก All ซึ่งคำว่า All นี้ไม่ได้เป็นจังหวัดอะไรในเทเบิล ก็จะไม่มีผลลัพธ์อะไรแสดงออกมา นั่นคือเหตุที่ทำไมถึงเขียนว่า "ต้องกำหนด "All" เข้าในฐานข้อมูล ด้วยครับ" แต่ในกรณีข้อมูลแบบนี้ เราไม่สามารถกำหนด All ลงในเทเบิลได้ จะเห็นได้ว่าปัญหาคือเงื่อนไขในคิวรี่ที่กำหนดตายตัวให้ต้องเทียบค่ากับคอมโบบ็อกซ์ แต่คิวรี่ก็ไม่สามารถถูกกำหนดให้เทียบกับคอมโบเมื่อจังหวัดที่เลือกไม่เป็น All และไม่ให้เทียบเมื่อจังหวัดที่เลือกเป็น All (เมื่อไม่เทียบ ทุกเรคอร์ดก็ย่อมแสดงออกมา เปรียบเสมือนเป็นการเลือก All)

ทางเลือกก็คือ
1. แก้ให้คิวรี่ไม่ต้องเทียบเงื่อนไขกับคอมโบ แต่หลังจาก requery แล้ว ให้ใช้ .Filter เพื่อกรองเอาเฉพาะจังหวัดที่ต้องการแทน หรือถ้าเลือก All ก็ไม่ต้องกรองอะไรเลย โค้ดก็เป็นลักษณะนี้คือ



Private Sub Cbofprovince_AfterUpdate()
   DoCmd.Requery qrf_province_m1noi
   if Me.Cbofprovince <> "All" then
      Forms("frmf_province_m1noi").Filter = "p_province = """ + Me.Cbofprovince + """ "
      Forms("frmf_province_m1noi").FilterOn = True
   else
      Forms("frmf_province_m1noi").Filter = ""
      Forms("frmf_province_m1noi").FilterOn = False
   end if
End Sub



2. กำหนด RecordSource ของฟอร์ม frmf_province_m1noi ให้เป็น SQL SELECT statement เหมือนในคิวรี่ ซึ่งต้องสร้าง SQL ให้มีเงื่อนไขการเปรียบเทียบ หรือไม่เปรียบเทียบ (กรณีเลือกเป็น All) ให้เรียบร้อยก่อน ตัวอย่างก็เช่น ในกระทู้ http://www.thai-access.com/yeadram_view.php?topic_id=5008 ลักษณะคล้ายๆกันเลย
13 @R21887
อาจารย์ครับ ผมยังไม่เข้าใจ ตรงข้อ 2 ที่ว่า
2. กำหนด RecordSource ของฟอร์ม frmf_province_m1noi ให้เป็น SQL SELECT statement เหมือนในคิวรี่ ซึ่งต้องสร้าง SQL ให้มีเงื่อนไขการเปรียบเทียบ หรือไม่เปรียบเทียบ (กรณีเลือกเป็น All) ให้เรียบร้อยก่อน
14 @R21888
ก็เป็น

Private Sub Cbofprovince_AfterUpdate()

   if Me.Cbofprovince <> "All" then

      Forms("frmf_province_m1noi").RecordSource = "select ... from ... where p_province = """ + Me.Cbofprovince + """ "

   else

      Forms("frmf_province_m1noi").RecordSource = "select ... from ... "

   end if

End Sub

ตรงที่เป็น select ... from ... คุณก็เข้าไปที่คิวรี่ qrf_province_m1noi แล้วแสดงในโหมด SQL View แล้วก็ก็อปปี้เอาเฉพาะส่วนนี้ที่ไม่รวม where ครับ
15 @R21889
เรียน อ.สันติสุข ปกติ มันเป็นดังรูป    แล้วอาจารย์บอกว่า ก็ก็อปปี้เอาเฉพาะส่วนนี้ที่ไม่รวม where มันคือจากไหนถึงไหนครับ ขอโทษน๊ะครับ ที่ผมไม่ทราบจริงๆครับ มือใหม่
16 @R21890
SELECT M1_noi.pin, M1_noi.number_sob, student_No.prefix, student_No.FirstName, student_No.LastName, student_No.TSEX, student_No.P_TUMBOL, student_No.P_AMPHUR, student_No.P_PROVINCE, student_No.TSEX
FROM student_No INNER JOIN M1_noi ON student_No.pin = M1_noi.pin
WHERE (((student_No.P_PROVINCE)=[Forms]![frmf_province_m1noi]![Cbofprovince]))
ORDER BY M1_noi.number_sob;

แก้ตรงไหนบ้างครับ
17 @R21891
ตรงนี้ครับ
(((student_No.P_PROVINCE)=[Forms]![frmf_province_m1noi]![Cbofprovince]))

เปลี่ยนเป็น

Forms("frmf_province_m1noi").RecordSource = "select ... from ... where student_No.P_PROVINCE = """ + Me.Cbofprovince + """ ORDER BY ... "
18 @R21892
ผมเปลี่ยนเป็น
SELECT M1_noi.pin, M1_noi.number_sob, student_No.prefix, student_No.FirstName, student_No.LastName, student_No.TSEX, student_No.P_TUMBOL, student_No.P_AMPHUR, student_No.P_PROVINCE, student_No.TSEX
FROM student_No INNER JOIN M1_noi ON student_No.pin = M1_noi.pin
WHERE Forms("frmf_province_m1noi").RecordSource = "select P_PROVINCE from M1_noi where student_No.P_PROVINCE = """ + Me.Cbofprovince + """ ORDER BY M1_noi.number_sob ";
แล้วพอเปิด from frmf_province_m1noi มันฟ้องว่าตามรูปครับ

19 @R21893
ไม่ใช่เอาที่เปลี่ยนไปแก้ไขในคิวรี่ครับ ให้เอาที่เปลี่ยนมาใส่ในโค้ดในคำตอบ R2188 ครับ ค่อยๆอ่านทั้งหมดอีกที
20 @R21970
ทำได้แล้วครับ อาจารย์ขอบคุณอ.สันติสุขมากครับ
แต่ยังติดตรงปัญหา เมื่อเลือกจังหวัดต่างๆ ผลการนับเพศ ชาย หญิง รวม ถูกต้อง ครับ
แต่ถ้าเลือก All ผลการนับจำนวนเพศชาย หญิง รวม ออกมาเป็น 0 หมดครับ
- ผมใช้สูตรการนับเพศชาย ที่ control source คือ =DCount("[Tsex]","[qrf_Province_m1nok]","[Tsex] = 'ชาย'")
- ใช้สูตรการนับเพศหญิง ที่ control source คือ =DCount("[Tsex]","[qrf_Province_m1nok]","[Tsex] = 'หญิง'")
- ใช้สูตรการนับรวม ที่ control source คือ =DCount("[Tsex]","[qrf_Province_m1nok]","[Tsex] = 'ชาย' OR [Tsex] = 'หญิง'")
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2098s