การ Lock Form และ SubForm
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 358   7
URL.หัวข้อ / URL
การ Lock Form และ SubForm

เรียน อ.สุภาพ 
ผมมี field ที่ Main form เป็น  check box (yes no) เมื่อ Click Check box (on current หรือ  on open )ต้องการ ให้ Lock ทั้ง Main form และ Subform  
รบกวน อ.ช่วยเหลือครับ 
 

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

1 @R00620
จากที่ถามว่า ผมมี field ที่ Main form เป็น check box (yes no) หมายความว่าฟีลด์นี้อยู่ในตารางที่นำมาสร้างเป็น Main Form ใช่มั๊ยครับ คือมันเป็น Bound Check Box หรือว่าเพิ่ม Check Box ขึ้นมาต่างหาก ไม่ได้ Link กับฟีลด์ใด ถ้าเป็นแบบหลังนี้ ผมอยากให้ลองสร้าง command button ขึ้นมา 1 อัน แล้วตั้งชื่อ cmdLockForms แล้วใส่ Caption ของมันให้เป็น Lock ใช้ Properties 3 ตัว ของ Form คือ AllowAdditions, AllowDeletions และ AllowEdits ร่วมกันที่จะ Lock ฟอร์มและซับฟอร์ม จะใช้ Lock Property อย่างเดียวไม่ได้ เพราะยังสามารถที่จะลบข้อมูลได้อยู่ Private Sub cmdLockForms_Click() Dim ctl As Control ' ดูว่า Caption เป็น Lock หรือ Unlock If Me.cmdLockForms.Caption = "Lock" Then Me.AllowAdditions = False Me.AllowDeletions = False Me.AllowEdits = False For Each ctl In Me.Controls ' ค้นหาว่ามี Subform อยู่ใน Form นี้หรือไม่ If ctl.ControlType = acSubform Then ' ถ้ามี ก็ให้ Lock เช่นกัน Me(ctl.Name).Form.AllowAdditions = False Me(ctl.Name).Form.AllowDeletions = False Me(ctl.Name).Form.AllowEdits = False End If Next ' เปลี่ยน Caption ของปุ่มให้เป็น Unlock Me.cmdLockForms.Caption = "Unlock" Else Me.AllowAdditions = True Me.AllowDeletions = True Me.AllowEdits = True For Each ctl In Me.Controls If ctl.ControlType = acSubform Then Me(ctl.Name).Form.AllowAdditions = True Me(ctl.Name).Form.AllowDeletions = True Me(ctl.Name).Form.AllowEdits = True End If Next ' เปลี่ยน Caption ของปุ่มให้เป็น Lock Me.cmdLockForms.Caption = "Lock" End If End Sub ถ้าเป็นแบบแรก ควรจะมีการจะต้องเปลี่ยนไปใช้กับเหตุการณ์ On Current Private Sub Form_Current() Dim ctl As Control ' ดูว่า Caption เป็น Lock หรือ Unlock If Me.CheckBox1 = True Then Me.AllowAdditions = False Me.AllowDeletions = False Me.AllowEdits = False For Each ctl In Me.Controls ' ค้นหาว่ามี Subform อยู่ใน Form นี้หรือไม่ If ctl.ControlType = acSubform Then ' ถ้ามี ก็ให้ Lock เช่นกัน Me(ctl.Name).Form.AllowAdditions = False Me(ctl.Name).Form.AllowDeletions = False Me(ctl.Name).Form.AllowEdits = False End If Next Else Me.AllowAdditions = True Me.AllowDeletions = True Me.AllowEdits = True For Each ctl In Me.Controls If ctl.ControlType = acSubform Then Me(ctl.Name).Form.AllowAdditions = True Me(ctl.Name).Form.AllowDeletions = True Me(ctl.Name).Form.AllowEdits = True End If Next End If End Sub คำถามเพิ่มเติมให้คิดต่อเล่น ถ้าต้องการที่จะแปลงโค้ดนี้ให้เป็นแบบ Generic โดยนำไปไว้ที่ Module จะต้องแก้ไขโค้ดอย่างไรบ้าง เพื่อให้สามารถนำไปใช้ได้กลับหลายฟอร์ม โดยไม่ต้องเขียนโค้ดซ้ำๆ กันในทุกฟอร์ม
2 @R00623
ขอบพระคุณครับ อ. ไม่ทราบว่าถ้าต้องการเรียนเพิ่มเติมกับอ. ติดต่อได้อย่างไรครับ
3 @R00624
ผมอยู่ขอนแก่นครับ คงไม่สะดวกถ้าจะเรียน มีอะไรก็ลองเข้ามาดูที่เว็บก็แล้วกันครับ ขอบคุณที่แจ้งให้ทราบครับ
4 @R00628
ที่ http://freeboard.ptcsweb.com/view_q.php?ruser=accesshotline&wbid=144 มีคำถามคล้ายๆ กัน ดังนี้ ใน Access database มี filed ชื่อ status อยุ่ ซึ่งfield ชื่อ status นี้เป็นตัวบอกสถานะของ Record โดยเริ่มจาก A , B , C ไป เรื่อย ๆ ถึง H ในปรกติ Record จะ สามารถ update ข้อมูลได้ตลอด( การ update ใช้ทำโดย Form ) แต่ผมอยากสร้างเพิ่มว่า ถ้า field ชื่อ status เป็น Z เมื่อใดแล้ว ให้ทุก Field ใน Record นั้น จะแสดงข้อมูลให้เห็น ใน Form ได้อย่างเดียว แต่จะ edit ข้อมูลใน Form ไม่ได้ ผมต้องทำอย่างไรครับ อดิศักดิ์ [ วันอังคาร ที่ 20 สิงหาคม 2545 เวลา 06:37 น. ] ผมเลยแนะนำไปดังนี้ ใช้ On Current ของ Form นะครับ Private Sub Form_Current() Dim ctl As Control If Me.Status = "Z" Then For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then ctl.Locked = True End If Next Else For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then ctl.Locked = False End If Next End If End Sub มันจะ Lock เฉพาะส่วนที่ Text Box แค่นั้นนะครับ ส่วนอื่น เช่น Check Box, Combox Box จะไม่ Lock ให้ครับ ถ้าต้องการให้ Lock ก็ต้องเพิ่มเงื่อนไขเข้าไปด้วย
5 @R00631
ขอพระคุณอีกครั้งครับ amn
6 @R00638
ผมได้ ดัดแปลง Code ของ อ.สุภาพนิดหน่อย เพื่อให้กระชับขึ้น และคิดว่าสามารถใช้ได้ครับ... Private Sub cmdLockForms_Click() ' ดูว่า Caption เป็น Lock หรือ Unlock If Me.cmdLockForms.Caption = "Lock" Then Me.AllowDeletions = False Me.AllowEdits = False Me!Subform_Name.Enabled = False Me!Subform_Name.Locked = True ' เปลี่ยน Caption ของปุ่มให้เป็น Unlock Me.cmdLockForms.Caption = "Unlock" Else Me.AllowDeletions = True Me.AllowEdits = True Me!Subform_Name.Enabled = True Me!Subform_Name.Locked = False ' เปลี่ยน Caption ของปุ่มให้เป็น Lock Me.cmdLockForms.Caption = "Lock" End If End Sub และผมได้ตัดประโยคนี้ Me.AllowAdditions ออก เพราะคิดว่าจะไม่สะดวกในแง่ผู้ใช้ต้องการเพิ่มข้อมูลใหม่จะได้ไม่ต้องเลื่อนเรคอร์ดไปยังเรคอร์ดที่มีสถานะเป็น No ก่อนจึงจะสามารถเพิ่มเรคอร์ได้ แต่ทั้งนี้และทั้งนั้น ก็ขึ้นอยู่กับวัตถุประสงค์ของ User ครับ
7 @R00641
so cool คุณ BadMan
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0497s