ขอความช่วยเหลือเรื่องการตัดเวลามาสาย
กระทู้เก่าบอร์ด อ.Yeadram

 1,184   8
URL.หัวข้อ / URL
ขอความช่วยเหลือเรื่องการตัดเวลามาสาย

พอดีว่าผมได้ข้อมูลจาก Finger Scan มา
โดยข้อมูลใน 1 Record ประกอบด้วย

รหัส ชื่อ แผนก เวลา สถานะ ประเภท

ตัวอย่างข้อมูล
1 สมชาย IT 13/1/2015 5:44 0 f

ทีนี้ผมเขียนเงื่อนไขลง Query (ไม่ได้ผ่าน Form นะครับ)
โดยอ้างอิง Table ของ Time แล้วเลือก Field ของเวลา
เขียนแล้วมัน Error แสดงผลเพี้ยนครับ โดยเงื่อนไขคือ
ใครที่มา 8:46-12:00 จะแสดงข้อความว่า สาย
และ 17:00-20:00 จะแสดงข้อความว่า OT     

พอจะชี้แนะวิธีเขียนเงื่อนได้บ้างหรือเปล่าครับ เพราะข้อมูลมันเยอะมาก

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

1 @R19959
น่าจะใช้ TimeValue() ในการตัดเวลาออกมาจากวันที่ก่อนนะครับ
แล้วค่อยมาเขียน iif เพื่อทดสอบ
2 @R19963
IIf(TimeValue([เวลา]) Between #17:00:00# And #20:00:00#,"OT",IIf(TimeValue([เวลา]) Between #8:46:00# And #12:00:00#,"สาย","ปกติ"))

ประมาณนี้มั้งครับ ลองปรับใช้ดูครับ
3 @R19964
ได้และครับผม ประหยัดเวลาตรวจสอบได้มากเลยทีเดียว ขอบคุณครับ
ที่เหลือเดี๋ยวผมเขียนเพิ่มเติมเองครับ
4 @R19968
รบกวนอีกเรื่องนึงครับ

ตอนนี้ผมทำ Count นับจำนวนมาสายกับ OT ไม่ได้ครับ มันขึ้น #Error ในช่องทำ Count เพื่อนับ Result (ทำบน Form Design นะครับ)

แล้วก็ตอน Export ไฟล์ออกไปใช้กับระบบอื่นเพื่อบันทึก มันดึงข้อมูลของทุกวันมา ไม่ทราบว่าตอนเขียนมาโคร มีวิธีตั้งเงื่อนไขเป็นของวันนั้น ๆ หรือไม่ครับ

ผมใช้มาโครของ ExportWithFormatting ไม่แน่ใจว่าถูกต้องหรือไม่
5 @R19975
Count ทั้งหมด หรือ Count แต่ละคน

สมมุติตารางชื่อ Table1
- Count ทั้งหมด ก็ประมาณนี้

สาย(ทั้งหมด): DCount("[เวลา]","Table1","TimeValue([เวลา]) Between #8:46:00# And #12:00:00#")

OT(ทั้งหมด): DCount("[เวลา]","Table1","TimeValue([เวลา]) Between #17:00:00# And #20:00:00#")

- Count ตามชื่อด้วย ก็ประมาณนี้

สาย(เฉพาะคน): DCount("[เวลา]","Table1","[ชื่อ] = '" & [ชื่อ] & "' AND TimeValue([เวลา]) Between #8:46:00# And #12:00:00#")

OT(เฉพาะคน): DCount("[เวลา]","Table1","[ชื่อ] = '" & [ชื่อ] & "' AND TimeValue([เวลา]) Between #17:00:00# And #20:00:00#")

หรือแบบซับคิวรี่ก็เหมือนกัน

สาย(เฉพาะคน): (SELECT count([เวลา]) FROM [Table4] AS b WHERE b.[ชื่อ] = Table4.[ชื่อ] AND TimeValue([เวลา]) Between #8:46:00# And #12:00:00#)

OT(เฉพาะคน): (SELECT count([เวลา]) FROM [Table4] AS b WHERE b.[ชื่อ] = Table4.[ชื่อ] AND TimeValue([เวลา]) Between #17:00:00# And #20:00:00#)

ปรับใช้ดูครับ
6 @R19980
Count ของวันนั้น ๆ และแบบเป็นช่วงเวลาครับ
เช่น วันที่ 5 พนักงานสายกี่คน แต่ตอนนี้มันดึงข้อมูลของทุกวันมารวมเป็นสายทั้งหมด

=DCount("[SJ]","Time Detail","TimeValue([SJ]) Between #8:46:00# And # 12:00:00#")

คือตอนนี้ไม่ Error และ แต่พอใส่เงื่อนไขให้เป็นวันที่ 1/1/2558 8:46:00
โดยผมพยายามทำการอ้างอิงด้วย Form

ผมเขียนผิดแน่ ๆ เลย
=DCount("[SJ]","Time Detail","TimeValue([SJ]) Between # Forms![sysTime]![T_StartDate] 8:46:00# And #Forms![sysTime]![T_EndDate] 12:00:00#")
7 @R19983
ไม่รู้รายละเอียดแทนชื่อไม่ถูก ตอนคำถามกับเขียนจริงคุณใช้ชื่อไม่เหมือนกัน เอาเป็นว่าประมาณนี้ครับ แทนชื่อให้ถูกก็น่าจะใช้ได้อะครับ

DCount("[SJ]","Time Detail","datevalue([SJ]) = '" & DateValue([ชื่อ Textbox เวลา]) & "' AND TimeValue([SJ]) Between #8:46:00# And #12:00:00#")

หรือถ้าทำคิวรี่ก็จะประมาณนี้

SELECT Format(datevalue([เวลา]),"dd/mm/yyyy") AS [วันที่], Count(DateValue([เวลา])) AS [สาย/วัน]
FROM Table1
WHERE TimeValue([เวลา]) Between #8:46:00# And #12:00:00#
GROUP BY DateValue([เวลา]);

ปรับใช้ดูครับ
8 @R19984
ได้และครับ ขอบคุณมาก ๆ เลยครับ ^^
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3870s