กระทู้เก่าบอร์ด อ.Yeadram
1,563 5
URL.หัวข้อ /
URL
แก้ไขข้อมูลในหน้าแบบฟอร์มเฉพาะวันที่บันทึก
ในหน้าแบบฟอร์มที่ให้มีการแก้ไขข้อมูลได้ ให้แก้ไขได้เฉพาะงานที่มีการบันทึกในวันนั้น หากข้อมูลไหนที่มีการบันทึกก่อนหน้านั้นไม่ให้ดำเนินการแก้ไข
ตัวอย่าง งานที่บันทึกในวันที่ 01-01-2009 ให้แก้ไขได้ภายในวันที่ 01-01-2009 เท่านั้น
ตัวอย่าง งานที่บันทึกในวันที่ 01-01-2009 ให้แก้ไขได้ภายในวันที่ 01-01-2009 เท่านั้น
5 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R02245
คุณต้องไปทำตรวจสอบใน Form_Dirty event พร้อมกับการใช้ .NewRecord property เพื่อตรวจว่าเป็นการแก้ไขหรือป้อนใหม่ โดยเทียบกับฟังก์ชั่น Date
Private Sub Form_Dirty(Cancel As Integer)
If Not Me.NewRecord Then
If CDate(Me.ฟิลด์วันที่) <> Date then
Msgbox "ห้ามแก้ไขรายการที่ไม่ใช่ของวันนี้"
Cancel = True
Exit Sub
End If
End If
End Sub
Private Sub Form_Dirty(Cancel As Integer)
If Not Me.NewRecord Then
If CDate(Me.ฟิลด์วันที่) <> Date then
Msgbox "ห้ามแก้ไขรายการที่ไม่ใช่ของวันนี้"
Cancel = True
Exit Sub
End If
End If
End Sub
3 @R02255
ขอบคุณครับ
4 @R02256
เพิ่มเติมครับ คุณสันติสุข หากว่าเราต้องการให้มีการแก้ไขได้ 1 ฟิลด์ละครับ ส่วน ฟิลด์อื่นๆแก้ไขไม่ได้ละครับ สามารถทำได้หรือไม่
5 @R02257
มันก็มีวิธีหลักๆอยู่ 2 วิธี คือ ล็อคฟิลด์นั้นก่อนที่เราจะป้อนข้อมูล หรือตรวจสอบป้องกันระหว่างการป้อนข้อมูลไปเลย
วิธีแรกนั้น เหมาะกับหน้าจอที่มีฟิลด์เยอะๆ แต่มีความยุ่งยากในการออกแบบลำดับการทำงานของหน้าจอและการควบคุมสถานะว่าตอนไหนจะให้ล็อคหรือปลดล็อค เช่น การจะเข้าสู่สถานะการแก้ไข ก็ต้องมีการกระทำบางอย่าง เช่น การคลิกปุ่ม Edit ส่วนจะออกจากสถานะการแก้ไข ก็ต้องดักไว้ทุกทาง เช่น หลังจาก save รายการที่แก้ไขแล้ว หรือเมื่อกดปุ่ม Esc เป็นต้น ถ้าจะทำวิธีนี้ ต้องคุยยาววววววว ซึ่งผมยังไม่มีเวลามาแนะนำครับ
ส่วนวิธีหลังนี้ ก็ใช้ Dirty event เหมือนกับโค้ดข้างบนนั่นแหล่ะครับ เพียงแต่เป็น event ของฟิลด์ต่างๆบนหน้าจอเท่านั้นแหล่ะครับ ง่ายกว่า เพียงแต่ถ้ามีฟิลด์เยอะ ก็ต้องมาเขียน event เหล่านี้ซ้ำๆกันเยอะตามไปด้วย เขียนเโค้ดข้างล่างเฉพาะฟิลด์ที่ ไม่ต้องการให้แก้ได้ ส่วนที่จะปล่อยให้แก้ ก็ไม่ต้องไปทำอะไรนะครับ
Private Sub ชื่อฟิลด์_Dirty(Cancel As Integer)
If Not Me.NewRecord Then
Cancel = True
Exit Sub
End If
End Sub
วิธีแรกนั้น เหมาะกับหน้าจอที่มีฟิลด์เยอะๆ แต่มีความยุ่งยากในการออกแบบลำดับการทำงานของหน้าจอและการควบคุมสถานะว่าตอนไหนจะให้ล็อคหรือปลดล็อค เช่น การจะเข้าสู่สถานะการแก้ไข ก็ต้องมีการกระทำบางอย่าง เช่น การคลิกปุ่ม Edit ส่วนจะออกจากสถานะการแก้ไข ก็ต้องดักไว้ทุกทาง เช่น หลังจาก save รายการที่แก้ไขแล้ว หรือเมื่อกดปุ่ม Esc เป็นต้น ถ้าจะทำวิธีนี้ ต้องคุยยาววววววว ซึ่งผมยังไม่มีเวลามาแนะนำครับ
ส่วนวิธีหลังนี้ ก็ใช้ Dirty event เหมือนกับโค้ดข้างบนนั่นแหล่ะครับ เพียงแต่เป็น event ของฟิลด์ต่างๆบนหน้าจอเท่านั้นแหล่ะครับ ง่ายกว่า เพียงแต่ถ้ามีฟิลด์เยอะ ก็ต้องมาเขียน event เหล่านี้ซ้ำๆกันเยอะตามไปด้วย เขียนเโค้ดข้างล่างเฉพาะฟิลด์ที่ ไม่ต้องการให้แก้ได้ ส่วนที่จะปล่อยให้แก้ ก็ไม่ต้องไปทำอะไรนะครับ
Private Sub ชื่อฟิลด์_Dirty(Cancel As Integer)
If Not Me.NewRecord Then
Cancel = True
Exit Sub
End If
End Sub
Time: 0.3625s
1 = Open
2 = Close
หาก Open ยอมให้แก้ไข
Close ไม่ให้แก้ไข
เพราะบางเคสหากยอมให้แก้ไข ข้อมูลจะผิดพลาด กระทบหลายส่วนมาก
จากคำถาม คุณมือใหม่ ลอง Current Event
if TransactionsDate <> now() then
me.text1.disable=false
me.text2.disable=false
me.text3.disable=false
endif
ลองประยุกต์ครับ