สอบถามเรื่องการทำรายชื่อ All ใน Combobox ครับ
กระทู้เก่าบอร์ด อ.Yeadram

 3,784   12
URL.หัวข้อ / URL
สอบถามเรื่องการทำรายชื่อ All ใน Combobox ครับ

ตอนนี้ผมได้สร้างฟอร์มค้นหาขึ้นมาแล้วครับโดยสร้าง Combobox 2 ชั้นสัมพันธ์กันระหว่างเขตภาคและรายชื่อผู้แทนฯ แต่หาวิธีที่จะทำให้เวลาเลือกในช่องเขตภาคเป็น All แล้วให้ช่องรายชื่อผู้แทนฯแสดงรายชื่อทั้งหมด หรือ ถ้าหากว่าไม่ได้เลือกในช่องเขตภาค จะให้รายชื่อในช่องผู้แทนฯแสดงทั้งหมด ไม่ได้ครับ



โดยตอนนี้ใช้วิธีสร้างความสัมพันธ์ตามภาพ??ี้อยู่ครับ

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

1 @R05266
ในคอมโบของคุณ >ในมุมมองออกแบบ > ใน Dialog คุณสมบัติ >ในช่อง control source (แหล่งข้อมูล)
มันจะเขียนเป็นสายอักขระ SQL
ก็อบปี้มันมาทั้งหมดเลยครับ ขอดูหน่อย
2 @R05267
3 @R05275


SELECT DlrZone.DlrZone FROM DlrZone ORDER BY DlrZone.[no];
ส่วนนี้คือ combo ช่องบนครับ

SELECT DlrName.DlrName FROM DlrZone INNER JOIN DlrName ON DlrZone.DlrZone=DlrName.DlrZone WHERE (((DlrZone.DlrZone)=Forms!frmSearch!cbZone)) ORDER BY DlrName.DlrName;
ส่วนนี้เป็น combo ช่องล่างครับ

ขอบคุณอาจารย์สันติสุขมากนะครับ ผมได้ลองทำตามลิ้งค์แล้วแต่ไม่ได้ครับ เพราะผมไม่มีความชำนาญทางด้านนี้เลย
4 @R05276
คอมโบตัวบน เปลี่ยนเป็น
SELECT "*" AS NM, "ALL" AS DlrZone From DlrZone
UNION
SELECT DlrZone.DlrZone as NM, DlrZone.DlrZone FROM DlrZone
ORDER BY DlrZone.[no];


- ปรับแต่งคุณสมบัติของ คอมโบตัวบน เป็น 2 คอลัมน์
- ความกว้างคอลัมน์ 0;3
- คอลัมน์ที่ถูกผูก ให้เลือก 1

คอมโบตัวล่างเปลี่ยนเป็น
SELECT DlrName.DlrName FROM DlrZone INNER JOIN DlrName ON DlrZone.DlrZone=DlrName.DlrZone WHERE (((DlrZone.DlrZone) Like Forms!frmSearch!cbZone)) ORDER BY DlrName.DlrName;

เขียนสดหน้าเว็บนะครับไม่ได้ทดสอบ ถ้าติด error ใดๆ ช่วยจับ error มาดูด้วยนะครับ

วิธีนี้ผมไม่ถนัดเลย (การเล่นกับคิวรี่+พารามิเตอร์เนี่ย) ถ้ายังแก้ไม่ได้คงต้องใช้วิธีที่ถนัดครับ (เขียนโค้ด)
5 @R05281
"The ORDER By expression (DlrZone.[no]) includes fields that are not selected by the query. Only those fields requested in the the first query can be included in an ORDER BY expression."

ตอนนี้ถ้าไปเลือกรายการทีคอมโบช่องบนจะขึ้นข้อความตามข้างบนนี้ครับ
แต่ถ้าผมลองเอาในส่วนสีแดงออกถึงจะใช้ได้ แต่ว่าจะไม่มีการเรียงลำดับข้อมูล

SELECT "*" AS NM, "ALL" AS DlrZone From DlrZone
UNION
SELECT DlrZone.DlrZone as NM, DlrZone.DlrZone FROM DlrZone
ORDER BY DlrZone.[no];
6 @R05283
ลองเปลียนอีกรอบครับ
เพราะเราต้องการเรียงลำดับก็เพิ่มฟิลด์เข้ามาเพื่อให้เรียงลำดับ
SELECT "*" AS NM, "ALL" AS DlrZone, 0 as [no]
From DlrZone
UNION
SELECT DlrZone.DlrZone as NM, DlrZone.DlrZone, DlrZone.[no]
FROM DlrZone
ORDER BY [no];

7 @R05286
ใช้ได้แล้วครับ
ขอบคุณมากเลยครับ ไม่ทราบว่ามีคอร์สสอนที่ไหนมั๊ยครับรบกวนอาจารย์หลายรอบแล้วอยากไปสมัครเป็นลูกศิษย์
8 @R05292
ถามอาจารย์เพิ่มหน่อยครับ ขอโทษที่ผมไม่ได้บอกรายละเอียดตั้งแต่แรก

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

ถ้ายังไงรบกวนอาจารย์เพิ่มด้วยนะครับ ผมลองค้นหากระทู้ที่เกี่ยวกับเรื่องนี้แล้วแต่ก็ไม่เข้าใจสักที
9 @R05293
เลิกใช้วิธี (คิวรี่ + พารามิเตอร์) มันไม่ยืดหยุ่นพอ
- เดาว่าในฟอร์มปลายทางของคุณใช้ คิวรี่เป็นแหล่งข้อมูล
และในคิวรี่ตัวนั้นมีพารามิเตอร์ ให้อ้างจากคอนโทรลในฟอร์มปัจจุบัน
แล้วใช้ operator = แทนที่จะใช้ operator Like

หันมาใช้วิธีเขียนโค้ดดีกว่าครับ
- ไปเอาพารามิเตอร์ออกจากแหล่งข้อมูลของฟอร์มปลายทาง
ให้มันเป็นฟอร์มที่แหล่งข้อมูล แต่ไม่มีเงื่อนไข ไว้ก่อน
- ทีนี้ เวลาต้องการเปิดฟอร์ม ให้ใช้คำสั่งเปิดฟอร์ม คล้ายๆ อย่างนี้
docmd.openform "form1",,,"[ฟิลด์1] Like '" & me.combo1 & "'"
เห็นไหมครับสิ่งที่ส่งเข้าไปพร้อมกับคำสั่งเปิดฟอร์ม นั่นแหละครับเงื่อนไข
10 @R05300
พอดีผมไม่เข้าใจคำว่า "ให้มันเป็นฟอร์มที่แหล่งข้อมูล แต่ไม่มีเงื่อนไข" อยู่นิดหน่อยครับ ผมต้องไปเอาออกให้หมดรวมทั้ง "Control Source" ด้วยหรือเปล่าครับ
11 @R05301
ผมพิมพ์ตกครับ ขออภัย
"ให้มันเป็นฟอร์มที่มีแหล่งข้อมูล แต่ไม่มีเงื่อนไข"

ไม่เกี่ยวกับ control source ครับ พวกนั้นเอาไว้อย่างเดิม

แหล่งข้อมูลของฟอร์มของคุณคือ ตาราง หรือคิวรี่ครับ
ถ้าแหล่งข้อมูลของคุณเป็นตาราง ก็ข้ามไปประเด็นอื่นได้เลยครับ (แสดงว่าผมเดาผิด)

ถ้าแหล่งข้อมูลของคุณเป็นคิวรี่ ให้ดูว่าคิวรี่ของคุณมีพารามิเตอร์ หรือไม่ ถ้ามีให้ไปเอาออกครับ (ส่วนของฟอร์มไม่ต้องปรับแต่งอะไรครับ)
ถ้าไม่แน่ใจว่าต้องเอาอะไรออก ก็ลองคัดลอก SQL ของคิวรี่เอามาให้ดูหน่อยก็ได้ครับ
12 @R05304
ได้แล้วครับขอบคุณมากครับอ.yeadram

DoCmd.OpenForm "form2", acNormal, , "([เขตภาค] = '" & Me.cbเขตภาค & "') and([รายชื่อ] = '" & Me.cbรายชื่อ & "')"

ผมได้ลองตัดส่วนของสีน้ำเงินในส่วนของฟอร์มที่ใช้ค้นหาข้อมูลออกถึงจะใช้งานในฟอร์มค้นหาแบบมี "ALL" ได้ โดยให้เป็นใช้เงื่อนไขเดียวในการค้นหาคือรายชื่ออย่างเดียวตัดส่วนของเขตภาคออกไป
แต่ไม่แน่ใจว่าจะมีผลอะไรหรือเปล่าเพราะผมเห็นว่ามันใช้งานได้แล้ว รบกวนอาจารย์ช่วยดูให้ด้วยนะครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3583s