การเลือกใช้งาน listbox และ subform ย่อย
กระทู้เก่าบอร์ด อ.Yeadram

 1,641   5
URL.หัวข้อ / URL
การเลือกใช้งาน listbox และ subform ย่อย



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

ในหน้านี้จะเป็นหน้าบันทึกชื่อวิทยากร และ ผู้เข้าร่วมอบรมโครงการ ลงในข้อมูลโครงการอบรมครับ

กรอบสีขาว - คือชื่อโครงการต่าง ๆ เมื่อคลิกก็จะแสดงชื่อวิทยากรและผู้เข้าร่วมอบรมที่กรอบสีเหลืองซ้ายและสีเทาซ้าย

กรอบสีเหลืองซ้ายและขวา - เมื่อเปิดโครงการใหม่ กรอบเหลืองซ้ายจะเป็นค่าว่าง ซึ่งจะต้องเลือกข้อมูลวิทยากรจากกรอบสีเหลืองขวามาใส่ (ลักษณะคือดับเบิ้ลคลิกชื่อที่ด้านขวาและปรากฏที่ด้านซ้าย)

กรอบสีเทาซ้ายและขวา - เมื่อเปิดโครงการใหม่ กรอบเทาซ้ายจะเป็นค่าว่าง เมื่อต้องการเพิ่มข้อมูลผู้เข้าร่วมอบรมจะข้อมูลจากกรอบเทาขวามาใส่ (ลักษณะคือดับเบิ้ลคลิกชื่อที่ด้านขวาและปรากฏที่ด้านซ้าย)

ซึ่งผมยังคิดไม่ออกว่าควรใช้เครื่องมือตัวไหนดีจึงจะเหมาะสมกับระบบนี้
ตอนนี้คิดไว้แค่ใช้ List Box ทั้งซ้ายและขวา แสดงรายชื่อวิทยากรและผู้เข้าร่วมอมรม และส่งข้อมูลไป
หรือใช้ Subform ดึงฟอร์มมาทั้งฟอร์มเป็น Subform ย่อย ทั้งซ้ายและขวา เมื่อคลิกที่ Subform ขวา ก็ส่งข้อมูลไปที่ Subform ซ้าย (อันนี้ผมว่าแปลก ๆ เพราะส่งค่าข้ามฟอร์มเลย)
จึงอยากขอคำแนะนำจากทุก ๆ ท่านว่าใช้ตัวไหนดี หรือถ้ามีเทคนิคอื่น ๆ ที่ดีกว่าก็ได้ครับ

และสุดท้าย ผมเขียนโค้ดส่งค่าไม่เป็นใน Access เคยเขียนแต่ VB ที่ใช้ Datagridview รบกวนขอโค้ดตัวอย่าง หรือคำแนะนำด้วยครับ

ขอบคุณมาก ๆ ครับ

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

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

- Row Source property ของ listboxกรอบเหลืองขวา ให้มีค่าเป็น SQL SELECT statement ที่เลือกแสดงเฉพาะวิทยากรที่ยังไม่ได้ถูกเลือกสำหรับโครงการนั้นๆ    SQL ก็มีลักษณะเป็น select .. from เทเบิลของกรอบเหลืองขวา as A left join เทเบิลของกรอบเหลืองซ้าย as B on A.วิทยากร = B.วิทยากร where B.โครงการ = โครงการที่เลือก and B.วิทยากร is null    ค่า Row Source นี้จะต้องถูกกำหนดใหม่ทุกครั้งที่มีการเลือกโครงการในกรอบขาว หรือเมื่อมีการเลือกวิทยากรในกรอบเหลืองขวา หรือเมื่อยกเลิกวิทยากรในกรอบเหลืองซ้าย

- Row Source property ของ listbox กรอบเหลืองซ้าย ก็กำหนดเป็น SQL SELECT statement คล้ายๆกัน และถูก requery ใหม่ทุกครั้งที่มีการเพิ่มหรือลดวิทยากรหรือเปลี่ยนโครงการ

- เมื่อเลือกวิทยากรในกรอบเหลืองขวาแล้ว ก็เขียนเรคอร์ดลงในเทเบิลของกรอบเหลืองซ้าย

- เมื่อลดวิทยากรในกรอบเหลืองซ้ายแล้ว ก็ลบเรคอร์ดลงในเทเบิลของกรอบเหลืองซ้ายออกไป

- การใส่ row source   ก็ใช้คำสั่ง listbox.rowsource = "....คำสั่ง SQL SLECT statement..."

- การ requery   ให้ใช้คำสั่ง listbox.requery

- การดูว่า listbox ที่เลือกคือค่าอะไร ให้เรียก listbox เฉยๆ    หากมีหลายคอลัมน์ใน listbox สามารถเขียน listbox.column(N) เพื่ออ่านค่าของคอลัมน์ที่ต้องการ โดยที่ N = เลขที่คอลัมน์ (ซึ่งเริ่มจากศูนย์)

- event ที่ใช้สำหรับการเลือกหรือไม่เลือกของ listbox ก็ใช้ Double Click event น่าจะเหมาะสม หรือถ้าจะเอาสะดวกกว่านี้ จะใช้ Click event ธรรมดาๆก็ได้

- กรอบเทาก็ทำเหมือนกรอบเหลืองแหล่ะครับ
2 @R20980
ขอบคุณมาก ๆ ครับ ขอถามอีกคำถามครับ

แล้วเวลาบันทึกข้อมูลที่อยู่ใน List box ใส่ในตารางควรเขียนโค้ดยังไงครับ หากพิมพ์ตัวอย่างได้ดีมาก ๆ เลยครับ

ขอบคุณมาก ๆ ครับ ^^
3 @R20981
จะเขียนเป็น SQL INSERT statement (ลองหาจากกระทู้เก่าด้วยคำว่า INSERT INTO) หรือจะเรียกใช้ method ผ่าน Data Access Object ที่มีอยู่ 2 ตัว ตัวนึงคือ DAO อีกตัวคือ ADODB (หาจากกระทู้เก่าด้วยคำว่า Append) ตัวไหนก็ได้ แล้วแต่ถนัดครับ

4 @R20982
แก้ไข : ไม่ใช่ Append นะครับ ที่ถูกต้องคือ AddNew
5 @R21393
เดิมใช้Access2000 ใน Windows Me พอย้ายไปเครื่องใหม่เป็นAccess2010 Windows 8.1 Enterprise เรียกโปรแกรมให้ทำงาน มันไม่ทำงานตามที่เราผูกการทำงานไว้ที่Event ลอง Debug ดูตามEvent มันก็ไม่เข้าไปทำงาน เป็นเหมือนกันทั้งก่อนและหลังทำการแปลงจาก.mdb ตกเป็น.accdb เป็นเพราะอะไร และแก้ไขอย่างไรดีคะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2167s