ต้องทำฟอร์มโดยให้เรากดปุ่มเพิ่มแถวลงมาเรื่อยๆ
กระทู้เก่าบอร์ด อ.Yeadram

 3,539   8
URL.หัวข้อ / URL
ต้องทำฟอร์มโดยให้เรากดปุ่มเพิ่มแถวลงมาเรื่อยๆ

เรียนถาม อ.yeadram และท่านที่รู้ครับ

ผมต้องการทำฟอร์มเหมือนดังรูปข้างล่างครับ
พอกดปุ่ม Add ก็ให้มันเพิ่มแถวให้ใส่ข้อมูลรายชื่อ
ถ้ากดปุ่ม Delete ก็ให้มันลบแถวที่ cusor อยู่
พอกดปุ่ม Save ก็ให้มันเอาข้อมูลเข้าไปเก็บใน table เรียงลำดับตามนั้นครับ


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

1 @R00143
เพิ่มเติมอีกนิดครับ บนหัวฟอร์มมีการเลือก แผนกด้วยครับ สมมุติในตัวอย่างเป็นแผนก บุคคล ถ้าเลือกแผนก บัญชี ก็ให้ดึงขึ้นมูล พนักงานในแผนกบัญชีแสดงขึ้นมาให้เราจัดการได้ครับ
2 @R00144
สร้างฟอร์ม ย่อย ธรรมดาครับ
ทำเป็น datasheet ก็ได้ครับ
เมื่อต้องการให้เพิ่มแถวว่าง ก็สั่งให้ฟอร์มย่อย สามารถเพิ่มข้อมูลได้ (Allowadditons =true)
เมื่อต้องการให้แถวหาย ก็สั่งให้ฟอร์มย่อย ไม่สามารถเพิ่มข้อมูลได้ (Allowaddions=false)
สำหรับการเลือกแผนก
ให้มีคอนโทรลไว้เลือกที่ฟอร์หลัก เมื่อมีการเลือก ก็ เขียนคิวรี่ใหม่ ให้เป็น source ของฟอร์มย่อย แล้วตามด้วยคำสั่ง ให้ฟอร์มย่อย รีคิวรี่ ครับ เช่น

sub combo_change()
me.child1.recordsource = "Select * From table Where field Like '" & combo & "';"
me.child1.requery
end sub

คร่าวๆ พอเป็นแนวทางนะครับ
ส่วน ตัวอย่างที่ผมเคยทำคล้ายๆ กันก็มีสองสามตัวอย่าง แต่รูปแบบอย่างนี้ มันแค่เป็นส่วนหนึ่งครับ บางทีไม่สังเกตดีๆ จะไม่เห็นว่ามีรูปแบบ แบบนี้แฝงอยู่
อย่างตัวอย่างในกระทู้ http://thai-access.com/yeadram_view.php?topic_id=14
โหลดไฟล์นั้นไปดูตัวอย่างได้ครับ   ดูการทำงาน เมื่อมีการเปลี่ยนโหมด Edit กับ View จะเป็นการทำงนคล้ายๆ กันครับ แล้วให้ดูตัวอย่างการเขียนโค้ด ครับ น่าจะพอได้แนวทางขึ้นอีกนะครับ
ถ้าไม่พอ หรือยังคิดว่าไม่ตรงเท่าไหร่ โพสต์มาอีกทีนะครับ หรือจะให้ทำตัวอย่าง beckham owen นี้ให้ดูเลยหรือเปล่า อิอิ!
3 @R00145
ขอบคุณ อ.yeadram มากครับสำหรับคำตอบ
แต่ยังไม่ตรงตามวัตถุประสงค์ของผมเท่าไหร่
คือพอกด Add ผมอยากจะให้ form มันสร้าง unbound ลงมาเรื่อยๆ ครับ เหตุผลที่ผมต้องกานเช่นนั้น
เพราะว่าตามจริงในนั้น เพราะยังมีอีกหลายฟิล์ดด้วยกันที่ผมต้องการจะเก็บแยกไป 2 table ครับ
เช่น id, name ไปเก็บไว้ที่ table1
id, income, etc ไปเก็บไว้ที่ table2 ครับ
4 @R00146
ลองใส่
    DoCmd.GoToRecord , , acNewRec
ไว้ที่ปุ่ม Add-->onclick
5 @R00148
หมายความว่าให้มัน สร้าง-ทำลาย คอนโทรลในขณะ รัน เลยเหรอครับ
อิอิ ออกแบบงาน ให้มันยากไปหรือเปล่า

ผมว่างานนี้น่าจะเหมาะกับคำสั่ง CreateControl ค้นดูใน help นะครับ
แต่ผมลองใช้แล้ว ก็เคยใช้แต่ใน ขณะ ออกแบบ (Design Time)
แม้จะเขียนด้วยโค้ดทั้งหมดก็ตาม ก็จะสั่งผ่านฟังก์ชั่นในโมดูล หรือสั่งจากปุ่มคำสั่งในฟอร์มหลัก ให้
-เอาซอร์สออกจากคอนโทรล child1 (sub form control) (เพื่อจะปิดฟอร์ย่อย)
-เปิดฟอร์มย่อยในมุมมองออกแบบ
-สร้างคอนโทรลให้ฟอร์มย่อย ****** นี่คือที่ ที่จะใช้ CreateControl ****
-สั่งเซฟและปิดฟอร์มย่อย
-เอาซอร์สมาใส่ คอนโทรล sub form คืน

ผมเคยทำแต่อย่างนี้ครับ ดูท่าแล้วผมคงช่วยคุณไม่ได้แล้วล่ะ ณ ตอนนี้
เดี๋ยวว่างๆ จะลองหาวิธีดูครับ อยากจะลองเหมือนกัน ว่าจะหาวิธียังไงดี ช่วงนี้ต้องรอผู้รู้ท่านอื่นๆ มาช่วยแล้วล่ะครับ
6 @R00149
การป้อนข้อมูลลงบรรทัดเดียว แต่จะกระจายไปเขียนลงหลายเทเบิล อาจเป็นตัวชี้วัดได้ว่า คุณออกแบบฐานข้อมูล ผิดแล้ว เพราะมันจะกลายเป็น one-to-one ซึ่งคำถามตามมาก็คือ ถ้าเป็น one-to-one จริง แล้วทำไมถึงไม่รวมเป็นเทเบิลเดียว แต่ในทางกลับกัน ถ้าเป็น one-to-many ก็น่าจะหันไปใช้ main form ลิงค์กับ sub form ซึ่งจะเหมาะสมกับงานมากกว่า

ส่วนเรื่องต่อไป Control ไม่สามารถสร้างระหว่าง run-time ครับ ถ้าต้องการ Unbound จริง คุณก็ต้องสร้างเผื่อไว้ก่อนครับ แล้วจะซ่อน จะแสดง ก็ต้องมาควบคุมกันเอง ซึ่งทำให้เสียเวลาในการเขียนโปรแกรมควบคุม ถ้าต้องการทำ แนะนำให้สร้างเทเบิลเพื่อเก็บข้อมูลที่ป้อน แล้วใน Form_AfterUpdate event ค่อยไปกระจายไปลงเทเบิลต่างๆ น่าจะง่ายกว่าครับ

7 @R00150
ขอบคุณทุกท่านครับ เดี๋ยวผมจะนำไปปรับปรุงต่อไปครับ
8 @R00151
ผมลองใหม่แล้ว การ createcontrol ที่ อ.yeadram ว่า น่าจะเหมาะสำหรับงานของผม
เพราะผมไม่อยากให้มันเก็บลงใน table1 ทันที จนกว่าจะกดปุ่ม save
อยากกด เพิ่มแถวลงมาใส่ข้อมูลจนครบก่อน หรือถ้าผิดก็อยากลบข้อมูลในแถวนั้น
ออก พอกดปุ่ม save จึงจะให้มันเข้าไปเก็บไว้ใน table1 และ table2 ด้วยครับ
ถ้า อ.yeadram ยังไม่มีเวลาก็ไม่เป็นไรครับ ผมลองหาดูในเว็บก่อน ไม่รู้ว่าจะมีหรือเปล่า
แต่จำเป็นต้องใช้วิธีนี้จริงๆ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3002s