กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
335 6
URL.หัวข้อ /
URL
... เรียนอาจารย์สุภาพครับ ...
ไม่ทราบ ว่าเราจะหาค่าความต่างของเวลา เหมือนกับ ฟังชั่นหาค่าความต่างของวันที่ได้ไหม( datediff)
เช่น จะหาว่า คนๆ นี้มาทำงานกี่ชม กี่นาที
เข้าทำงาน 08:00
เลิกงาน 17:00
แบบเอา 17:00 - 08:00 = ชม : นาที
จะได้ไหมครับ
ใช้คำสั่งอย่างไรบ้างครับ
เอ่อ แล้วจากกระทู้ 1931 น่ะครับ
ที่อาจารย์บอกให้ใช้ Append ช่วย + CDate() มันคือคำสั่งใน Query หรือปล่าวครับ
ไม่ทราบว่าต้องใช้อย่างไร ครับ ช่วยบอกอีกที
ขอบคุณมากครับ
เช่น จะหาว่า คนๆ นี้มาทำงานกี่ชม กี่นาที
เข้าทำงาน 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
2 @R04558
ลองใช้ คำสั่ง Format แล้วก็ไม่ได้
Dim ttime as string
ttime = "0800"
MsgBox "" & Format(CDate(ttime), "hh:nn")
ก็ได้เป็น 00:00 น่ะครับ
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")
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 )
แก้ไขอย่างไรดีครับ คิดมาหลายวันแล้ว ไม่ได้สักที
เรียนอาจารย์ช่วยเหลืออีกทีครับ
ขอบคุณครับ
ทีนี้ผมก็เลยมาประยุกต์ จะให้มันแปลงเป็นรูปแบบ 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
ชลบุรี
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
ชลบุรี
Time: 0.1181s
CDate("0800")
ก็จะได้เป็น
10/3/2545
แทนที่จะเป็ฯ 08:00 น่ะครับ
ไม่ทราบว่า ทำยังไงดี