... เรียนอาจารย์สุภาพครับ ...
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 278   6
URL.หัวข้อ / URL
... เรียนอาจารย์สุภาพครับ ...

ไม่ทราบ ว่าเราจะหาค่าความต่างของเวลา เหมือนกับ ฟังชั่นหาค่าความต่างของวันที่ได้ไหม( datediff)

เช่น จะหาว่า คนๆ นี้มาทำงานกี่ชม กี่นาที
เข้าทำงาน 08:00
เลิกงาน 17:00

แบบเอา 17:00 - 08:00 = ชม : นาที

จะได้ไหมครับ
ใช้คำสั่งอย่างไรบ้างครับ

เอ่อ แล้วจากกระทู้ 1931 น่ะครับ
ที่อาจารย์บอกให้ใช้ Append ช่วย + CDate() มันคือคำสั่งใน Query หรือปล่าวครับ
ไม่ทราบว่าต้องใช้อย่างไร ครับ ช่วยบอกอีกที
ขอบคุณมากครับ


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

1 @R04557
เอ่ออาจารครับ ผมลองใช้ CDate ดูมันไม่ได้เป็นเวลาอ่ะครับ ได้เป็นวันเดือนปีแทน เช่น

CDate("0800")

ก็จะได้เป็น
10/3/2545

แทนที่จะเป็ฯ 08:00 น่ะครับ
ไม่ทราบว่า ทำยังไงดี
2 @R04558
ลองใช้ คำสั่ง Format แล้วก็ไม่ได้

Dim ttime as string
ttime = "0800"
MsgBox "" & Format(CDate(ttime), "hh:nn")

ก็ได้เป็น 00:00 น่ะครับ
3 @R04562
ลองแบบนี้แทนครับ

Dim ttime As String
ttime = "0815"
If InStr(ttime, ":") = 0 Then
ttime = Left(ttime, 2) & ":" & Right(ttime, 2)
End If
MsgBox Format(CDate(ttime), "hh:nn")

4 @R04568
เอ่อ อาจารย์ครับ

ทีนี้ผมก็เลยมาประยุกต์ จะให้มันแปลงเป็นรูปแบบ time แล้วก็บันทึกลงตารางใหม่(บันทึกลง ฟิลที่เป็นชนิดข้อมูล Date/time เลย)
เพื่อที่จะนำไปคิดเวลาใหม่

แต่ มันไม่ได้น่ะครับ ขึ้น Type Mismatch (ยังไม่ได้มีการ addnew ไปที่ตารางใหม่เลย)

Private Sub Command0_Click()
Dim tTime As String
Dim rst2 As DAO.Recordset
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset("select * from time_recorder")
Set rst2 = dbs.OpenRecordset("select * from Time2")
DoCmd.TransferText acImportFixed, "time_recorder_spec", "Time_Recorder", "d:\employee\text file\time_recorder.txt"

Do

tTime = rst!Time
On Error GoTo err1
If InStr(tTime, ":") = 0 Then
tTime = Left(tTime, 2) & ":" & Right(tTime, 2)
End If
err2:
rst2.AddNew
rst2!EMP_ID = rst!EMP_ID
rst2!duty_io = rst!duty_io
rst2!Year = rst!Year
rst2!Month = rst!Month
rst2!Day = rst!Day
rst2!Time = Format(CDate(tTime), "hh:nn")
rst2!time_rec_id = rst!time_rec_id
rst2.Update

Loop
Exit Sub

err1:
tTime = "0" & Left(tTime, 2) & ":" & Right(tTime, 2)
If Not rst.EOF Then GoTo err2
End Sub

---------
คือว่า ค่า tTime มันกลายเป็น 080:00 น่ะครับ (ซึ่งตอนแรกมันคิดว่าเป็น 800 ผมก็เลย เพิ่ม 0 ข้างหน้าให้มันอีกตัว แต่ดันกลายเป็ฯ 080:00 )

แก้ไขอย่างไรดีครับ คิดมาหลายวันแล้ว ไม่ได้สักที
เรียนอาจารย์ช่วยเหลืออีกทีครับ

ขอบคุณครับ
5 @R04569
เอ่อ อาจารครับ ช่วยอธิบายคำสั่ง InStr() ว่ามันคืออะไร ไว้ใช้ทำอะไร
คืออ่านในคู่มือแล้วไม่เข้าใจน่ะครับ
6 @R04603
ลองดู Funtion นี้ครับ อ.สุภาพ เคยแนะนำผมไว้ครับ
Function fNegHourDiff(dteStart As Date, dteEnd As Date) As String
Dim strReturn As String, lngDiff As Long
lngDiff = Abs(DateDiff("s", dteStart, dteEnd))
strReturn = Format(lngDiff \ 3600, "00") & ":" & _
Format((lngDiff Mod 3600) \ 60, "00") & _
":" & Format((lngDiff Mod 3600) Mod 60, "00")
If dteStart > dteEnd Then
strReturn = strReturn & " (negative hours)"
End If
fNegHourDiff = strReturn
End Function
ลองดูนะครับ
ขอบพระคุณมากๆ ครับ
Suchat
ชลบุรี
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0406s