ต้องการให้ Lock เฉพาะบาง Record
กระทู้เก่าบอร์ด อ.Yeadram

 4,503   15
URL.หัวข้อ / URL
ต้องการให้ Lock เฉพาะบาง Record

ผมสร้าง Form ขึ้นมาด้วย AutoForm : Tabular ลักษณะของ Form คือจะคล้าย ๆ Excel และผมจะมีฟิลด์อยู่หนึ่งฟิลด์เป็น Checkbox

สมมุติว่าผมมีข้อมูลอยู่ 10 Record ความต้องการคือ เมื่อผู้ใช้มีการคลิ๊กที่ Checkbox เป็นเครื่องหมายถูกเมื่อไร Record นั้นจะ Enable ไปทั้ง Record

นั้นหมายความว่าใน 10 Record นั้นจะเหลือที่สามารถให้ทำการติ๊กถูกได้อีกแค่ 9 Record เท่านั้น

แต่พอผมใส่คำสั่งตามตัวอย่างด้านล่าง มัน Enable ทั้ง 10 Record เลยครับ ไม่ทราบว่าผมต้องเขียนคำสั่งหรือตั้งค่าอย่างไรครับขอบคุณครับ

If Recive_Check.Value = True Then
   textbox1.Enabled = False
   textbox2.Enabled = False
   textbox3.Enabled = False
   textbox4.Enabled = False
   textbox5.Setfocus
   Recive_Check.Enabled = False
endif


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

1 @R14819
ลองวาง code ใน event On Current ดูครับ
2 @R14820
ผมลองดูแล้วครับ ผลออกมาเหมือนกันครับ ตอนแรกเข้าใจว่า On Current ที่ CheckBox ก็ไปหาดูแต่ไม่เจอ

ก็เลยคิดว่าน่าจะเป็นที่ Form ที่ก็ได้ผลเหมือนเดิม ขอบคุณ คุณ PichaiTC มากครับที่กรุณาช่วยมาตอบ ตอนนี้ผมก็พยายามหาวิธีอยู่ครับ
3 @R14822
ดูคร่าวๆ เป็นเพราะคุณไม่ได้เขียนแก้กลับหรือเปล่าครับ เช่น

If Recive_Check.Value = True Then
   textbox1.Enabled = False
   textbox2.Enabled = False
   textbox3.Enabled = False
   textbox4.Enabled = False
   textbox5.SetFocus
   Recive_Check.Enabled = False
Else
   textbox1.Enabled = True
   textbox2.Enabled = True
   textbox3.Enabled = True
   textbox4.Enabled = True
   textbox5.SetFocus
   Recive_Check.Enabled = True
End If
ไว้ทั้งที่ On Current ของฟอร์ม และใน After Update ของ Recive_Check ครับ
4 @R14823
ขอบคุณ คุณ TTT ครับ จากที่ทดสอบแล้วผลออกมาเหมือนเดิมครับ กด 1 Record Lock ทั้ง 10 เลยครับ

งมอยู่ตั้งแต่เช้ายังนึกไม่ออกเลย
5 @R14824
อย่างนี้ครับ คือจริงๆ มันน่าจะได้นะครับ แต่คุณต้องกดไปยังเรคคอร์ดที่ Recive_Check ยังไม่ได้ทำเครื่องหมายถูก ฟิลด์ทั้งหมดก็จะกลายเป็น Enable และหากคุณกดไปยังเรคคอร์ดที่ Recive_Check ทำเครื่องหมายถูกไว้ ฟิลด์ทั้งหมดก็จะเป็น Disable อย่างนั้นใช่ไหมครับ
นั่นเป็นธรรมชาติของฟอร์มครับ มันจะทำตามเรคคอร์ดที่เลือกเหมือนกันทุกเรคคอร์ด
6 @R14825
แต่หากความต้องการของคุณคือ อยากให้เห็นถึงมาแตกต่างระหว่างเรคคอร์ดที่ทำเครื่องหมายที่ Checkbox กับไม่ทำเครื่องหมาย
เท่าที่นึกได้คือการเซ็ท conditional ของแต่ละฟิลด์ให้มีสีต่างกันแทน
ตัวอย่าง
1. เปลี่ยนโค๊ดเดิมเป็น
If Recive_Check.Value = False Then
   textbox1.Locked = False
   textbox2.Locked = False
   textbox3.Locked = False
   textbox4.Locked = False
   textbox5.SetFocus
   Recive_Check.Locked = False
Else
   textbox1.Locked = True
   textbox2.Locked = True
   textbox3.Locked = True
   textbox4.Locked = True
   textbox5.SetFocus
   Recive_Check.Locked = True
End If
ไว้ทั้งที่ On Current ของฟอร์ม และใน After Update ของ Recive_Check เหมือนเดิม

2. ในมุมมองออกแบบฟอร์ม เลือกเมนูหัวข้อ Format > Conditional Formatting
2.1 หน้าต่าง Conditional Formatting Rules Manager กดปุ่ม New Rule ใส่ค่าตามภาพ



ทำทุกคอนโทรลบนฟอร์มที่คุณต้องการ ก็จะได้สีของเรคคอร์ดที่ต่างกันระหว่างทำเครื่องหมายกับไม่ทำเครื่องหมาย

ปล. ที่ต้องเปลี่ยนจากการใช้ Property Enabled เป็น Locked แทน เพราะการใช้ Conditional คอนโทรลจะถูกโปรแกรมแก้ให้ Enabled เป็น True เสมอเมื่อใช้ Conditional ถ้าไม่อยากให้ข้อมูลแก้ไขได้ เลยต้องใช้เป็น Locked แทน

ลองปรับใช้ดูนะครับ
7 @R14826
ขอบคุณ คุณTTT อีกครั้งครับ

ฟอร์มผมออกแบบเป็น Tabular คือ หน้าตามันจะคล้าย ๆ Excel ครับ มันจะโชว์ทั้ง 10 Record พอกด CheckBox มันก็ Lock หมดเลย

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

ผมงมอยู่นานคิดไปคิดมาทำหลายวิธี็ก็ไม่ได้สักที เลยเปลี่ยนวิธีทำเป็นลักษณะนี้ครับ

พอกดปุ่ม CheckBox จะมี MsgBox ถามยืนยัน ถ้าตอบ OK Record นี้จะหายไปเลยครับ แต่จะไปเก็บไว้อีก Table หนึ่งครับ ซึ่ง Tbl นี้จะ Lock ทั้งหมดที่มีการยืนยันแล้วครับ

ขอบคุณ คุณTTT อีกครั้งครับ
8 @R14827
แต่ก็ยังอยาก ได้วิธีการ Lock เฉพาะบาง Record อยู่ครับ ตอนนี้ก็ยังพยายาหาวิธีอยู่เหมือนกันครับ
9 @R14828
คือผมก็ไม่รู้ว่าปัญหาอยู่ตรงไหน แต่จากตัวอย่างที่ผมให้ไปน่าจะทำอย่างที่คุณ Akung ต้องการได้นะครับ เอางี้แล้วกันผมทำเป็นไฟล์ตัวอย่างจากวิธีที่ผมเขียนไว้ข้างต้นให้คุณไปเปรียบเทียบดูแล้วกันนะครับ
โหลดที่นี่ครับ

http://cloudbox.3bb.co.th/share3/NjE3NnxmYzFmMDczZmU5MTQwM2YwMGQyMjE5MTg1ZmRlYTc5YnwzNTMwOA==
10 @R14829
โอ้วขอบคุณมากเลยครับคุณ TTT ที่อุตสาทำตัวอย่างมาให้ แต่คำสั่งก็เหมือนกันหมดเลยนะครับ ยกเว้นผมเห็นตรงค่า Format ที่คุณเปลี่ยนจาก Yes/No เป็น True/False เดี่ยวยังไง ผมจะลองทดสอบกับตัวโปรแกรมผมดูครับ

แต่ผมสงสัยอย่างครับ ผมไม่เห็นคำสั่ง Enable เลย แต่ทำไมเวลา CheckBox เป็น True โปรแกรมกับ Enable ได้ครับ รบกวนขอความรู้อีกครั้งครับขอบคุณมากครับ
11 @R14830
ไม่ใช้การเซ็ท Property Enable แล้ว เปลี่ยนเป็น Locked แทนครับ
ลองดูที่ Reply หมายเลข R14825 ทำตามนั้นทุกประการณ์ครับ
12 @R14831
เข้าใจแล้วครับ มันเป็นเรื่องของ Conditional Format ที่ทำให้เป็นสีแบบนั้น ขอบคุณมากครับ
13 @R14836
รบกวนเพิ่มเติมอีกนิดครับ คือตัวอย่างที่คุณ TTT ทำมาให้ดู มีอยู่ทั้งหมด 8 รายการ

แต่ถ้าบังเอิญผู้ใช้คลิ๊กเพลินไปคลิ๊กช่องด้านล่างสุดมันจะกลายเป็นการ Add เพิ่มทั้งที่รายละเอียดของบุคคลที่ 9 ไม่มีอะไรเลย พอจะมีทาง Lock ได้ไหมครับ

ว่าถ้าให้ทำได้แค่ 8 รายการที่มีรายการอยู่
14 @R14837
ทำได้แล้วครับ แค่ไปเพิ่มที่ on current ไปอีกเงื่อนไข

if Textbox1 = "" Then
Recive_Check.Locked = True
Else
Recive_Check.Locked = False
Endif

ขออภัยที่ถามเองตอบเองครับ
15 @R14846
ผมเคยเจอปัญหายังงี้เวลาทำ CHECKBOX เป็น unbound ครับ วิธีแก้ผ้าเอาหน้ารอดของผมคือต้องมี tableที่เก็บค่า CHECKBOX จริงๆถึงจะไม่วิ่งรวดเดียว 10 RECORDS
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3091s