ขอถาม 2 ข้อครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,462   6
URL.หัวข้อ / URL
ขอถาม 2 ข้อครับ

1.ถ้าในรายงานจำนวนชั่วโมงเป็น 5.5 ชั่วโมง (5 ชั่วโมงครึ่ง) แต่ต้องการเปลี่ยนเป็น 5 ชม. 30 นาที ต้องทำอย่างไรครับ

2. ถ้าตอนกรอกข้อมูล ฟิลด์นั้นเป็น short time ถ้าใส่เป็น 8.00 จะผิด ถ้าใส่ 8:00 จะถูก มีวิธีแก้ไขไหมครับ ไม่อยากกด : (โคลอน) บ่อยๆ ค่อนข้างเสียเวลา

รบกวนด้วยครับ

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

1 @R08115
ตอบข้อ 1...................
ถ้าเขียนย่อ 5ชั่วโมงจะได้ว่า
a=5.5

แปลง ค่า A เป็นนาที่ จะได้
A = a * 60

เอาจำนวนนาทีทั้งหมด หรือผลลัพธ์ของข้อเมื่อกี้นี้เอง มาหารแบบไม่เอาเศษเพื่อหาจำนวนชั่วโมง
จะได้
Hr = A\60

ต่อไปหา นาทีที่เหลือ ก็หานาที ก็คือการหาร เอาแต่เศษ
Mn = a mod 60

ถ้าอยากได้คำตอบแบบ string ก็ตอบ
คำตอบ = Hr & ":" & Mn

ถ้าอยากได้คำตอบแบบ Date/Time ก็ใช้ฟังก์ชั่นช่วยแปลง
คำตอบ = TimeSerial(Hr, Mn, 0)


ถ้าคุณเขียนแบบนี้ ต่อให้โจกท์ไม่ได้ลงท้ายด้วย .5 มันก็หาได้
เช่น 5.2 ชั่วโมง ก็จะเท่ากับ 5ชั่วโมงกับ 12นาที

.......................................
ถ้าคุณเอาแนวทางข้างต้น ไปเขียนเป็นฟังก์ชั่น คุณก็สามารถนำฟังก์ชั่นนี้ไปทำงานร่วมกับข้อ 2 ได้
เช่น
Text2_BeforeUpdate()
if len(text2)>0 then
if instr(1,text2,".") then
text2= ฟังก์ชั่น(text2)
end if
end if
end sub
ประมาณนี้ครับ
2 @R08123
ขอบคุณ อ. yeadram มากครับ

แนวทางข้อแรกที่นำมาให้ เอาไปใช้ได้ครับ ก็ใช้วิธีสร้าง textbox อันที่ 2 แล้ว textอันที่ 1 ซ่อนเอาไว้

นี่คือที่ทำเสร็จแล้วครับ

=IIf(IsNull([sick]),"",([sick]*60\60) & "." & ([sick]*60 Mod 60))

ส่วนข้อที่ 2 ก็ให้ user ใช้ : (โคลอน) ต่อไปแล้วกัน หาทางแก้ไม่ออก

ถามอีกข้อครับทำไมใช้ ฟังก์ชั่น ceiling ในaccess มันบอกไม่รุ้จักครับ


=CEILING([text1],30)

ทั้งที่ copy มาจาก EXCEL งง
3 @R08124
ตอบข้อ 2 นะครับ
ที่ textbox ที่ลงเวลา เข้าไปที่ property กด tab Data เลื่อนหา
input mask แล้วใส่ 00:00;0;_

ทดลองดูนะครับ
4 @R08126
ทดลองแล้วครับ เยี่ยมเลยครับ

ขอบคุณ ditasilk ครับ

แต่ติดข้อสงสัย ceiling นี่ล่ะครับ งง อยู่
5 @R08128
หาเพิ่มเติม ให้ ไปพบ เขียนบน ASP ดัดแปลงนิดหน่อย

เอาไว้ที่ Module

Public Function Ceiling(ByVal n)
Dim iTmp, bErr, f
On Error Resume Next
n = CDbl(n)
If Err Then bErr = True
On Error GoTo 0

If bErr Then Err.Raise 5000, "Ceiling Function", _
"Input must be convertible to a sub-type of double"

f = Floor(n)
If f = n Then
Ceiling = n
Exit Function
End If
Ceiling = CInt(f + 1)
End Function

Function Floor(ByVal n)
Dim iTmp, bErr

On Error Resume Next
n = CDbl(n)
If Err Then bErr = True
On Error GoTo 0

If bErr Then Err.Raise 5000, "Floor Function", _
"Input must be convertible to a sub-type of double"

'Round() rounds up
iTmp = Round(n)

'test rounded value against the non rounded value
'if greater, subtract 1

If iTmp > n Then iTmp = iTmp - 1


Floor = CInt(iTmp)
End Function

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