IsSaveClicked กับ Subform
กระทู้เก่าบอร์ด อ.Yeadram

 1,555   8
URL.หัวข้อ / URL
IsSaveClicked กับ Subform

ผมได้ลองนำโค้ดที่ได้จากกระทู้ 2194 มาลองทำแล้ว สำหรับฟอร์มที่ไม่มีฟอร์มย่อยนั้น สามารถใช้งานได้ไม่มีปัญหา
แต่สำหรับฟอร์มที่มีฟอร์มย่อย (ฟอร์มย่อยกับฟอร์มหลักผูกกันโดยใช้ PK ของฟอร์มหลัก) สามารถกรอกข้อมูลในฟอร์มหลักได้ แต่ไม่สามารถทำอะไรกับฟอร์มย่อยได้เลย ไม่ทราบว่าจะแก้ไขอย่างไรดีครับ

ลักษณะการทำงานคือ ไว้กรอกข้อมูลอย่างเดียว

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

1 @R22423
ที่บอกว่า "ไม่สามารถทำอะไรกับฟอร์มย่อยได้เลย" คือทำอะไรครับ ไม่น่าจะกรอกข้อมูลในฟอร์มย่อยไม่ได้นะครับ โค้ดไม่ได้มีอะไรไปควบคุมตรงนั้นเลย

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

ยังไงก็ตาม มันดูไม่เหมาะสมและตลกๆในทางปฏิบัติที่ต้องมีปุ่ม Save อยู่เต็มไปหมด ก็ต้องกลับมามองว่าทำไมเราถึงอยากมีปุ่ม Save กันไว้ ? ในระบบที่ผมทำ จะไม่มีปุ่ม Save เลย ผมจะให้ Access ทำงานตามที่มันเป็น แต่ระบบผมจะไม่เอาเรคอร์ดเหล่านั้นไปใช้ จนกว่าจะเช็คเจอว่าผู้ใช้ยืนยันเอกสารใบนั้นแล้ว โดยเพิ่มอีกฟิลด์เพื่อบ่งบอกสถานะการยืนยัน และกำหนดฟิลด์นี้ไว้ในเทเบิลของฟอร์มหลักก็พอ การยืนยันก็จะมีปุ่มให้ยินยัน ถ้ายังไม่ยืนยัน ข้อมูลชุดนั้นจะแก้ไข ลบทิ้งยังไงก็ได้ เปรียบเหมือนเป็นกระดาษร่างเอกสารที่ยังเขียนไม่เสร็จ แต่ถ้ายืนยันแล้ว ก็เหมือนเอกสารนั้นประทับตราไว้แล้ว จะมาแก้ไขหรือลบไม่ได้ครับ หรือถ้าจะไม่ใช้เอกสารใบนั้นแล้ว ก็จะไม่มีการลบออกไปครับ แต่จะต้องประทับตราว่า "ยกเลิก" แทน
2 @R22424
เรียน อาจารย์ สันติสุขครับ

ผมสามารถกระทำกับ Subform ได้แล้วครับ โดยเปลี่ยนจาก

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Cancel = Not IsSaveClicked
End Sub

เป็น

Private Sub Form_BeforeUpdate(Cancel As Integer)
    IsSaveClicked = False
End Sub

3 @R22425
เรียน อาจารย์ สันติสุข อีกครั้งครับ

1. จาก R22424 ผมเจอกับปัญหาตรงที่มันบันทึกข้อมูลได้โดยที่เราไม่ได้กดปุ่ม บันทึกอะครับ ไม่ทราบว่าเกิดจากปัญหาอะไร

2. จากคำถามเดิมตามหัวข้อ Subform ของผมเป็นแบบ Continuous Forms ไม่ทราบว่าจะเกี่ยวข้องกับโค้ดในกระทู้ 2194 หรือเปล่าครับ

ปล. ก่อนที่จะ Insert ค่าลงไปใน MainForm สามารถกรอกค่าใน Subform ได้ แต่พอ PK ของ MainForm ได้ Generate ค่าไปแล้ว ไม่สามารถกรอกค่าหรือกระทำการใดๆได้เลย (เหมือนมัน Disable ไว้อะครับ)
4 @R22426
1. ไม่แน่ใจครับ ยังไงลองดูใน property sheet ของฟอร์ม (กด F4 ให้แสดงได้) ว่าที่ช่องของ Event ต่างๆนั้น มี event ไหนที่เราได้เขียนโค้ดเอาไว้ แต่ค่าของช่องไม่ได้เป็นคำว่า [Event Procedure] ถ้ามี ก็ให้เลือกเป็น [Event Procedure] ด้วยครับ ไม่ก็ต้องลองดีบักโปรแกรมดูครับ หาว่าค่าตัวแปร IsSaveClicked มันเป็นอะไรและเปลี่ยนแปลงค่าไปเมื่อไหร่ ถึงจะรู้ว่าผิดที่จุดไหน

2. ไม่เกี่ยวครับ โค้ดที่ให้ไปนั้นควบคุมเฉพาะส่วนของ main form ถ้าจะให้ควบคุม sub form ด้วย ก็ต้องเขียนเพิ่มอย่างที่บอกไว้

3. จากปล. ถ้า main form ไม่ได้กรอก ถึงแม้ sub form จะกรอกได้ แต่ก็ save ไม่ได้ครับ เพราะส่วนนึงของ PK ของเทเบิลใน sub form นั้น นำมาจาก PK ของ main form ในเมื่อไม่กรอก main form   ส่วนหนึ่งของ PK ก็จะเป็น Null ซึ่งระบบจะไม่ยอมอยู่แล้ว ไม่รู้ว่าทำไมของคุณถึงบันทึกได้ !
5 @R22459
รบกวน อาจารย์ สันติสุข หรือ ผู้รู้ทุกท่านอีกครั้งครับจาก R22423

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

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

ไม่ทราบว่ามีใครเคยประสบกับปัญหานี้หรือเปล่า หรือผมเป็นแค่คนเดียว T^T
6 @R22460
ผมมาอ่านดูปัญหาของคุณอีกที แล้วทำให้สงสัยว่า ลำดับขั้นตอนการป้อนนี่คือ
1. ป้อนฟอร์มหลัก
2. กดปุ่ม Save
3. ป้อนฟอร์มย่อย (แต่ป้อนไม่ได้)
ถ้าเป็นอย่างนี้จริง ตรงนี้ก็ยังคิดไม่ออกครับว่าทำไมถึงเป็นอย่างนั้น

แต่ถ้าคุณทำข้อ 1 แล้วไป ข้อ 3 เลย ซึ่งถ้าเป็นกรณีหลังนี่ จะเป็นอย่างที่คุณว่าคือป้อนไม่ได้นะครับ เพราะโค้ดที่ให้ไป จะควบคุมเฉพาะในฟอร์มของตัวเอง เวลาป้อนฟอร์มหลักแล้วจะไปป้อนฟอร์มย่อย ระบบ Access จะเข้าสู่กระบวนการบันทึกข้อมูลในฟอร์มหลักก่อนโดยอัตโนมัติ ดังนั้นมันจะตรวจสอบตามโค้ดเลยว่า ได้คลิกปุ่ม Save เพื่อการบันทึกหรือไม่ แต่ถ้าคุณไม่ได้กด การบันทึกก็เลยถูกยกเลิก ดังนั้นกระบวนการต่างๆที่จะตามมาหลังจากการบันทึกข้อมูลในฟอร์มหลักก็จะไม่ถูกกระทำ การเข้าไปฟอร์มย่อยก็จะไม่ทำงานด้วยเช่นกันครับ

7 @R22461
เรียน อาจารย์ สันติสุข ครับ ลำดับการทำงานเป็นแบบนี้ครับ

ป้อนฟอร์มหลัก > ป้อนฟอร์มย่อย > กดปุ่ม Save ครับ

จากที่อาจารย์ สันติสุข ได้กล่าวมา ก็คือ ไม่สามารถกระทำการใดๆกับ Subform ได้เลยใช่มั้ยครับ หรือ(ถ้ามี)พอจะมีวิธีใดบ้างไหมครับ
8 @R22462
โค้ดที่ให้ไป ไม่ใช่สำหรับการบันทึกทีเดียวทั้งฟอร์มหลักและฟอร์มย่อยครับ วิธีที่ผมใช้ ก็ตามที่อธิบายใน R22423 ครับ คือการใช้การเพิ่มสถานะในเทเบิลแทน แต่โปรแกรมเราทั้งระบบก็ต้องมีการเช็คสถานะนี้ครับ ว่าเอกสารนั้นจะเอาไปใช้/แก้ไข/ลบทิ้ง/หรืออื่นๆ ได้หรือยังไม่ได้ด้วย
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3706s