กระทู้เก่าบอร์ด อ.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
กำหนด แหล่งข้อมูลแถว ="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 ;
ต้องเพิ่มยังไงบ้างครับ อธิบายหน่อยครับ แบบละเอียดนะ ผมไม่ค่อยเก่งอะครับ
"คิวรี่" หาเพศ มันก็จะได้ แค่ชายกับหญิงเท่านั้นครับ แต่ว่าถ้าผมต้องการเลือกทั้งหมดอะครับ ทั้งชายและหญิง ครับ
นี่ คือ ที่ผม กำหนด แหล่งข้อมูลแถว= 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 หรือเปล่าครับ
- ต้องกำหนด "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;
ลองดูครับ
การเพิ่ม "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" เข้าในฐานข้อมูล ด้วยครับ
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
เลือกตัวอื่นๆ แสดงหมด ยกเว้น 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 จะขึ้นข้อมูลทุกจังหวัดครับ *****
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 ตามภาพครับ
คิวรี่ ชื่อ qrf_province_m1noi ตามภาพครับ
12 @R21860
ตารางด้านขวาผูกเข้ากับคิวรี่ qrf_province_m1noi ซึ่งคิวรี่ก็มีเงื่อนไขเลือกเอาเรคอร์ดที่ฟิลด์จังหวัดมีค่าเท่ากับในคอมโบบ็อกซ์ ดังนั้นเวลาเลือกจังหวัดต่างๆ ตารางก็แสดงได้ถูกต้อง แต่พอเลือก All ซึ่งคำว่า All นี้ไม่ได้เป็นจังหวัดอะไรในเทเบิล ก็จะไม่มีผลลัพธ์อะไรแสดงออกมา นั่นคือเหตุที่ทำไมถึงเขียนว่า "ต้องกำหนด "All" เข้าในฐานข้อมูล ด้วยครับ" แต่ในกรณีข้อมูลแบบนี้ เราไม่สามารถกำหนด All ลงในเทเบิลได้ จะเห็นได้ว่าปัญหาคือเงื่อนไขในคิวรี่ที่กำหนดตายตัวให้ต้องเทียบค่ากับคอมโบบ็อกซ์ แต่คิวรี่ก็ไม่สามารถถูกกำหนดให้เทียบกับคอมโบเมื่อจังหวัดที่เลือกไม่เป็น All และไม่ให้เทียบเมื่อจังหวัดที่เลือกเป็น All (เมื่อไม่เทียบ ทุกเรคอร์ดก็ย่อมแสดงออกมา เปรียบเสมือนเป็นการเลือก All)
ทางเลือกก็คือ
1. แก้ให้คิวรี่ไม่ต้องเทียบเงื่อนไขกับคอมโบ แต่หลังจาก requery แล้ว ให้ใช้ .Filter เพื่อกรองเอาเฉพาะจังหวัดที่ต้องการแทน หรือถ้าเลือก All ก็ไม่ต้องกรองอะไรเลย โค้ดก็เป็นลักษณะนี้คือ
2. กำหนด RecordSource ของฟอร์ม frmf_province_m1noi ให้เป็น SQL SELECT statement เหมือนในคิวรี่ ซึ่งต้องสร้าง SQL ให้มีเงื่อนไขการเปรียบเทียบ หรือไม่เปรียบเทียบ (กรณีเลือกเป็น All) ให้เรียบร้อยก่อน ตัวอย่างก็เช่น ในกระทู้ http://www.thai-access.com/yeadram_view.php?topic_id=5008 ลักษณะคล้ายๆกันเลย
ทางเลือกก็คือ
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) ให้เรียบร้อยก่อน
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 ครับ
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;
แก้ตรงไหนบ้างครับ
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 ... "
(((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 มันฟ้องว่าตามรูปครับ
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] = 'หญิง'")
แต่ยังติดตรงปัญหา เมื่อเลือกจังหวัดต่างๆ ผลการนับเพศ ชาย หญิง รวม ถูกต้อง ครับ
แต่ถ้าเลือก 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] = 'หญิง'")
Time: 0.2098s