กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
437 7
URL.หัวข้อ /
URL
การ Lock Form และ SubForm
เรียน อ.สุภาพ
ผมมี field ที่ Main form เป็น check box (yes no) เมื่อ Click Check box (on current หรือ on open )ต้องการ ให้ Lock ทั้ง Main 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
Time: 0.1449s