แก้ไขข้อมูลในหน้าแบบฟอร์มเฉพาะวันที่บันทึก
กระทู้เก่าบอร์ด อ.Yeadram

 1,563   5
URL.หัวข้อ / URL
แก้ไขข้อมูลในหน้าแบบฟอร์มเฉพาะวันที่บันทึก

ในหน้าแบบฟอร์มที่ให้มีการแก้ไขข้อมูลได้ ให้แก้ไขได้เฉพาะงานที่มีการบันทึกในวันนั้น หากข้อมูลไหนที่มีการบันทึกก่อนหน้านั้นไม่ให้ดำเนินการแก้ไข
ตัวอย่าง งานที่บันทึกในวันที่ 01-01-2009 ให้แก้ไขได้ภายในวันที่ 01-01-2009 เท่านั้น

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

1 @R02244
ส่วนตัวผม จะสร้างฟิลด์ Status
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
ลองประยุกต์ครับ
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
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
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3625s