กระทู้เก่าบอร์ด อ.Yeadram
3,618 8
URL.หัวข้อ /
URL
ต้องทำฟอร์มโดยให้เรากดปุ่มเพิ่มแถวลงมาเรื่อยๆ
เรียนถาม อ.yeadram และท่านที่รู้ครับ
ผมต้องการทำฟอร์มเหมือนดังรูปข้างล่างครับ
พอกดปุ่ม Add ก็ให้มันเพิ่มแถวให้ใส่ข้อมูลรายชื่อ
ถ้ากดปุ่ม Delete ก็ให้มันลบแถวที่ cusor อยู่
พอกดปุ่ม Save ก็ให้มันเอาข้อมูลเข้าไปเก็บใน table เรียงลำดับตามนั้นครับ
ผมต้องการทำฟอร์มเหมือนดังรูปข้างล่างครับ
พอกดปุ่ม 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 นี้ให้ดูเลยหรือเปล่า อิอิ!
ทำเป็น 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 ครับ
แต่ยังไม่ตรงตามวัตถุประสงค์ของผมเท่าไหร่
คือพอกด Add ผมอยากจะให้ form มันสร้าง unbound ลงมาเรื่อยๆ ครับ เหตุผลที่ผมต้องกานเช่นนั้น
เพราะว่าตามจริงในนั้น เพราะยังมีอีกหลายฟิล์ดด้วยกันที่ผมต้องการจะเก็บแยกไป 2 table ครับ
เช่น id, name ไปเก็บไว้ที่ table1
id, income, etc ไปเก็บไว้ที่ table2 ครับ
4 @R00146
ลองใส่
DoCmd.GoToRecord , , acNewRec
ไว้ที่ปุ่ม Add-->onclick
DoCmd.GoToRecord , , acNewRec
ไว้ที่ปุ่ม Add-->onclick
5 @R00148
หมายความว่าให้มัน สร้าง-ทำลาย คอนโทรลในขณะ รัน เลยเหรอครับ
อิอิ ออกแบบงาน ให้มันยากไปหรือเปล่า
ผมว่างานนี้น่าจะเหมาะกับคำสั่ง CreateControl ค้นดูใน help นะครับ
แต่ผมลองใช้แล้ว ก็เคยใช้แต่ใน ขณะ ออกแบบ (Design Time)
แม้จะเขียนด้วยโค้ดทั้งหมดก็ตาม ก็จะสั่งผ่านฟังก์ชั่นในโมดูล หรือสั่งจากปุ่มคำสั่งในฟอร์มหลัก ให้
-เอาซอร์สออกจากคอนโทรล child1 (sub form control) (เพื่อจะปิดฟอร์ย่อย)
-เปิดฟอร์มย่อยในมุมมองออกแบบ
-สร้างคอนโทรลให้ฟอร์มย่อย ****** นี่คือที่ ที่จะใช้ CreateControl ****
-สั่งเซฟและปิดฟอร์มย่อย
-เอาซอร์สมาใส่ คอนโทรล sub form คืน
ผมเคยทำแต่อย่างนี้ครับ ดูท่าแล้วผมคงช่วยคุณไม่ได้แล้วล่ะ ณ ตอนนี้
เดี๋ยวว่างๆ จะลองหาวิธีดูครับ อยากจะลองเหมือนกัน ว่าจะหาวิธียังไงดี ช่วงนี้ต้องรอผู้รู้ท่านอื่นๆ มาช่วยแล้วล่ะครับ
อิอิ ออกแบบงาน ให้มันยากไปหรือเปล่า
ผมว่างานนี้น่าจะเหมาะกับคำสั่ง 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 ค่อยไปกระจายไปลงเทเบิลต่างๆ น่าจะง่ายกว่าครับ
ส่วนเรื่องต่อไป Control ไม่สามารถสร้างระหว่าง run-time ครับ ถ้าต้องการ Unbound จริง คุณก็ต้องสร้างเผื่อไว้ก่อนครับ แล้วจะซ่อน จะแสดง ก็ต้องมาควบคุมกันเอง ซึ่งทำให้เสียเวลาในการเขียนโปรแกรมควบคุม ถ้าต้องการทำ แนะนำให้สร้างเทเบิลเพื่อเก็บข้อมูลที่ป้อน แล้วใน Form_AfterUpdate event ค่อยไปกระจายไปลงเทเบิลต่างๆ น่าจะง่ายกว่าครับ
7 @R00150
ขอบคุณทุกท่านครับ เดี๋ยวผมจะนำไปปรับปรุงต่อไปครับ
8 @R00151
ผมลองใหม่แล้ว การ createcontrol ที่ อ.yeadram ว่า น่าจะเหมาะสำหรับงานของผม
เพราะผมไม่อยากให้มันเก็บลงใน table1 ทันที จนกว่าจะกดปุ่ม save
อยากกด เพิ่มแถวลงมาใส่ข้อมูลจนครบก่อน หรือถ้าผิดก็อยากลบข้อมูลในแถวนั้น
ออก พอกดปุ่ม save จึงจะให้มันเข้าไปเก็บไว้ใน table1 และ table2 ด้วยครับ
ถ้า อ.yeadram ยังไม่มีเวลาก็ไม่เป็นไรครับ ผมลองหาดูในเว็บก่อน ไม่รู้ว่าจะมีหรือเปล่า
แต่จำเป็นต้องใช้วิธีนี้จริงๆ
เพราะผมไม่อยากให้มันเก็บลงใน table1 ทันที จนกว่าจะกดปุ่ม save
อยากกด เพิ่มแถวลงมาใส่ข้อมูลจนครบก่อน หรือถ้าผิดก็อยากลบข้อมูลในแถวนั้น
ออก พอกดปุ่ม save จึงจะให้มันเข้าไปเก็บไว้ใน table1 และ table2 ด้วยครับ
ถ้า อ.yeadram ยังไม่มีเวลาก็ไม่เป็นไรครับ ผมลองหาดูในเว็บก่อน ไม่รู้ว่าจะมีหรือเปล่า
แต่จำเป็นต้องใช้วิธีนี้จริงๆ
Time: 0.3483s