รบกวนผู้รู้ช่วยด้วยครับ


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

27 ธ.ค. 64 , 09:01:45
อ่าน 413 ครั้ง

pattan0013

รบกวนผู้รู้ช่วยด้วยครับ
« เมื่อ: 27 ธ.ค. 64 , 09:01:45 »
สวัสดีครับ คือผมอยากจะกำหนดให้ Lock Record เมื่อสิ้นสุดเดือนนั้นๆแล้วผมได้คุณ PNR ให้วิธีตามด้านล่างมา



" ทำได้ 2 แบบด้วยกัน
แบบที่ 1
สมมุติตารางชื่อ Mytable
Field ไอดี ชื่อ ID
Field วันที่ ชื่อ Mydate

คิวรี่กำหนดดังนี้
SELECT Mytable.ID, IIf(Month([Mydate])=Month(Date()) And Year(Date())=Year([Mydate]),1,0) AS CheckMonth
FROM Mytable;
กำหนดชื่อคิวรี่ชื่อ QryCheckMonth
คิวรี่ด้านบน ท่านจะได้ข้อมูล ที่ถ้าหากปีเป็นปีปัจจุบัน และเดือนเป็นเดือนปัจจุบัน จะมีค่าเท่ากับ 1 ส่วนเดือนอื่นๆ ปีอื่นๆจะเท่ากับ 0

ต่อไปเขียนโค้ดไว้เรียกใช้เงื่อนไขในการเช็ค
Private Sub CheckAllowEdits()
Dim MonthCheck As String
MonthCheck = DLookup("CheckMonth", "QryCheckMonth", "ID =" & Me.ID & "")
If MonthCheck = 0 Then
Me.AllowEdits = False
Me.Undo
Else
Me.AllowEdits = True
End If
End Sub

ต่อไปเวลาจะนำโค้ดไปใช้ ก็ใส่ CheckAllowEdits ได้เลยครับ
อาจจะใช้ในเงื่อนไข หลังจากการค้นหาข้อมูลมาแสดงที่ฟอร์ม แล้วเช็คระบบการแก้ไข
หรือ ใช้ในปุ่มแก้ไขข้อมูลได้เลย เมื่อ User กดถ้าเ็นเดือนอื่นๆ มันจะ Undo ข้อมูลกลับทันทีและจะไม่สามารถกดพิมพ์เพิ่มอีกได้


แบบที่ 2 สามารถใช้กับ Formแบบ  Continuous Form ได้ดี
สมมุติตารางชื่อ Mytable
Field ไอดี ชื่อ ID
Field วันที่ ชื่อ Mydate

คิวรี่ ที่จะเป็น Record Source โค้ดจะเป็น
SELECT IIf(Month([Mydate])=Month(Date()) And Year(Date())=Year([Mydate]),1,0) AS CheckMonth, *
FROM Mytable;

เวลาเรานำ ข้อมูลลงมาบน Control ก็นำ Field CheckMonth ลงมาด้วย ตั้งชื่อ textbox ว่า CheckMonth เลย
โดยเราจะสามารถ กำหนดให้ซ่อนไว้ก็ได้ครับ ไม่ต้องแสดง
ต่อไปเราจะสร้างเงื่อนไขในการ ปิดการแก้ไขข้อมูลโดยใช้การจัดรูปแบบตามเงื่อนไข

กำหนดนิพจน์ตามภาพ

วิธีนี้เวลาแสดงในฟอร์มแบบ Continuous Form
ถ้าrecord ไหน CheckMonth = 0 จะถูก Enabled = false ทันที
คือกดแก้ไขไม่ได้เลย ถ้า CheckMonth = 1 ก็จะแก้ไขได้ปกติ "




แล้วคราวนี้จะรบกวนทุกท่านว่า ถ้าผมอยากให้ Lock Record 3วันหลังจากสิ้นเดือน ไม่ทราบว่าทุกท่านมีไอเดียอะไรบ้างไหมครับ???

 

27 ธ.ค. 64 , 14:53:48
ตอบกลับ #1

sjs

: รบกวนผู้รู้ช่วยด้วยครับ
« ตอบกลับ #1 เมื่อ: 27 ธ.ค. 64 , 14:53:48 »
ใช้  Datediff ช่วยเช็คได้ไหมครับ




 
โพสต์นี้ได้รับคำขอบคุณจาก: pattan0013

27 ธ.ค. 64 , 15:00:42
ตอบกลับ #2

pattan0013

: รบกวนผู้รู้ช่วยด้วยครับ
« ตอบกลับ #2 เมื่อ: 27 ธ.ค. 64 , 15:00:42 »
ใช้  Datediff ช่วยเช็คได้ไหมครับ



ขอบคุณมากเลยครับ แต่ผมอาจจะอธิบายไปชัดเจน ผมอยากให้ lock record วันที่ 3 ในเดือนถัดไปครับ จะใช้วิธีนี้ได้ไหมครับ?? แล้วมันจะใช้ได้ทุกเดือนไหมครับ??

 

27 ธ.ค. 64 , 15:07:10
ตอบกลับ #3

PNR

: รบกวนผู้รู้ช่วยด้วยครับ
« ตอบกลับ #3 เมื่อ: 27 ธ.ค. 64 , 15:07:10 »
อ้างถึง
ขอบคุณมากเลยครับ แต่ผมอาจจะอธิบายไปชัดเจน ผมอยากให้ lock record วันที่ 3 ในเดือนถัดไปครับ จะใช้วิธีนี้ได้ไหมครับ?? แล้วมันจะใช้ได้ทุกเดือนไหมครับ??
เช็คเฉพาะวันที่ 3 ของทุกเดือนใช้แบบนี้
SELECT IIf(Day(Mydate)=3,1,0) AS CheckMonth, *  FROM Mytable;

ถ้าอยากให้ วันที่ 3 ของเดือนนี้สามารถเพิ่มหรือแก้ไขข้อมูลได้แต่ของเดือนอื่นๆ ที่ไม่ใช่เดือนนี้ห้ามแก้ไขใส่แบบนี้
SELECT IIf(Day(Mydate)=3 And Not Month(Mydate) = Month(Date()),1,0) AS CheckMonth, *  FROM Mytable;


« แก้ไขครั้งสุดท้าย: 27 ธ.ค. 64 , 15:13:51 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: pattan0013

27 ธ.ค. 64 , 15:16:43
ตอบกลับ #4

pattan0013

: รบกวนผู้รู้ช่วยด้วยครับ
« ตอบกลับ #4 เมื่อ: 27 ธ.ค. 64 , 15:16:43 »
ขอบคุณมากครับ :miao: :miao: :miao:

 

29 ธ.ค. 64 , 08:22:58
ตอบกลับ #5

PNR

: รบกวนผู้รู้ช่วยด้วยครับ
« ตอบกลับ #5 เมื่อ: 29 ธ.ค. 64 , 08:22:58 »
ขอแก้ในส่วนของการเช็ควันที่ในเดือนปัจจุบันให้สามารถแก้ไขได้นะครับ ต้องเช็คปีด้วย
โค๊ด: [Select]
SELECT IIf(Day([Mydate])=3 And Month([Mydate])=Month(Date()) And Year([Mydate])=Year(Date()),1,0) AS CheckMonth, *
FROM Mytable;

ค่า 1 คือเข้าเงื่อนไขที่สามารถให้แก้ไขได้
ค่า 0 คือห้ามแก้ไข
Time to stop for me  :dizzy:
 


บอร์ดเรียนรู้ Access สำหรับคนไทย