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

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

คือรายละเอียด รบกวนอาจารย์ช่วยดู ใน code ของ form1 ที่ผม แนบมาด้วยแล้วให้หน่อยนะครับ

ส่วนปัญหาคือว่า ผมได้เขียนตามเงื่อนไข แล้ว แต่พอ run มันกลับ ไม่เป็นดังต้องการน่ะครับ
คือมันดึงข้อมูลมาไม่หมด (เหมือนมันเห็นข้อมูลไม่ครบ)
ผมไม่แน่ใจว่า ผมใช้คำสั่ง Select ข้อมูลผิด หรือ เงื่อนไขผิดหรือปล่าวมันเลยมาไม่ครบ

แล้วก็ในตาราง work_Time นั้น ในฟิลด์สี่ฟิล คือ ฟิล เวลาเข้า เวลาพัก เวลาเลิกพัก เวลาเลิกงาน นั้น
ได้มี เวลามาใส่อยู่ก่อนแล้ว ทั้งสี่อัน(แต่มีแค่เรคอดแรกเรคอดเดียว) นั่นก็คือ ผลจากการที่ผม run จาก cmd ใน Form1 น่ะแหล่ะครับ ซึ่งความจริงมันจะต้อง ใส่จนครบ ทั้งสี่ฟิลด์ และจนจบถึง เรคอดรหัสพนักงานที่ 0000006 เลย นี่แหล่ะปัญหาครับ

รบกวนอาจารย์ช่วยดูให้หน่อยนะครับ ตัวนี้ผมคิดมาเป็นเดือนแล้ว ยังคิดไม่ออกเหมือนกันว่าจะแก้ยังไง

ขอบคุณมากครับ

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

1 @R05549
ผมอ่านที่คุณ บอกมาแล้ว ... Load โปรแกรมไปดูแล้ว
ยังไม่เข้าใจเลยว่าคุณต้องการอะไร ..ขออีกรอบ (สั้น ๆ ไม่ใจความ)
2 @R05552
เอ้อ คือว่า

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

If rst!trc_duty_io = 1 And CDate("12:00") - CDate(rst!trc_time) > CDate("1:00") Then GoTo TimeIn

หมายถึงว่า ถ้า เรคอดนั้น มี trc_duty_io ใน time_recorder =1 และฟิลด์เวลา นำมาลบกับ CDate("12:00") แล้ว ได้มากกว่า CDate("1:00") คือให้ ไป run ต่อที่ TimeIn

ส่วน TimeIn คือ
TimeIn:
Do
rst2.Edit
rst2!wtm_timein = rst!trc_time ' ก็ให้นำเวลา ที่ได้จาก Time_Recorder มาใส่ใน ช่อง wtm_timein คือช่องเวลาเข้า ในตาราง Work_Time
rst2.Update
rst.MoveNext ' ให้ ตาราง Time_Recorder ไปเรคอดต่อไป(ตามเงื่อนไขใน rst ด้วยนะ)
If rst.EOF Then Exit Do ' ถ้าจบตามเงื่อนไขใน rst ก็ให้จบการทำงาน

If rst!trc_duty_io = 2 And CDate("13:00") - CDate(rst!trc_time) > CDate("0:00") Then GoTo BreakIn
If rst!trc_duty_io = 1 And CDate("12:00") - CDate(rst!trc_time) < CDate("0:00") Then GoTo BreakOut
If rst!trc_duty_io = 2 And CDate("13:00") - CDate(rst!trc_time) < CDate("0:00") Then GoTo TimeOut
' ทั้งสามบรรทัดนี้คือ เหมือนกับเงื่อนไข อันแรกสุดที่ผมยกมา เพียงแต่เปลี่ยนตัวแปรเท่านั้นเอง
Loop

ส่วนปัญหา ของผมตอนนี้มันมีอยู่ว่า มัน run จากใน rst แค่ 4 เรคอด (คือจริงๆ แล้วมันต้อง run จนหมด ทั้งตาราง time_recorder เลย แต่ต้อง run ตามเงื่อนไขด้วย แต่ผมก็ไม่ทราบเหมือนกันว่า ทำไมมัน run แค่ 4 เรคอดแล้วจบเลย คือเหมือนเงื่อนไขใน rst มันเห็นแค่ 4 เรคอดไรแบบนี้น่ะครับ)

ก็อย่าง Form1 ถ้าคุณ กด cmd แล้วมันก็จะนำเวลาจาก Time_Recorder ไปใส่ในแต่ละฟิลใน Work_Time แค่สี่อัน(ใส่ตามเงื่อนไขน่ะ)

งั้น รบกวนช่วย ลอง run cmd ใน form1 อีกทีนึงนะครับ (ให้ run ในตัวใหม่ที่ผมแนบไปนะคับ) แล้วลองไปสังเกตในตาราง Work_Time ดู(สังเกตก่อน run cmd ด้วยนะ เพราะตอนแรกทั้งสี่ฟิล เวลา มันจะว่างเปล่าหมด) ว่ามันจะไปเพื่ม แค่สี่อัน ซึ่งจริงๆ แล้วผมจะให้มันเพิ่มจนจบ รหัสพนักงานที่ 0000006 เลยน่ะครับ(ซึ่งใน Time_Recorder มันมีข้อมูลทั้งหมดครบหมดแล้ว เหลือแค่ เขียน ดึงไปใส่ใน Work_Time เท่านั้นเอง แต่ผมยังทำไม่ได้ครับ -_-")

รบกวนช่วยดูให้อีกทีนะครับ
ขอบพระคุณมากๆ เลยครับผม
3 @R05554
จากดตัวอย่างแรกผมลองทำอย่างนี้ครับ
Option Compare Database

Private Sub Command5_Click()
Dim rst2, rst3, rst4 As DAO.Recordset
Dim rst5 As DAO.Recordset
Set dbs = CurrentDb()
Set rst3 = dbs.OpenRecordset("select * from work_time") ' ´Ö§¢éÍÁÙÅÁÒà¾×èÍ·Õè¨ÐàÍÒä»à·Õº
Set rst4 = dbs.OpenRecordset("select * from time_recorder") ' ´Ö§¢éÍÁÙÅÁÒà¾×èÍ·Õè¨ÐàÍÒä»à·Õº

Set rst5 = dbs.OpenRecordset("SELECT DISTINCT TIME_RECORDER.TRC_EMP_ID, TIME_RECORDER.TRC_DATE FROM TIME_RECORDER;")
rst5.MoveFirst
Do Until rst5.EOF

Set rst = dbs.OpenRecordset("select * from time_recorder where trc_emp_id = " & rst5!trc_emp_id & " and CDbl(trc_date) = " & CDbl(rst5!trc_date)) ' µèÒ§ ¡çà·Õº¡ÑºÍÕ¡µÒÃÒ§
Set rst2 = dbs.OpenRecordset("select * from work_time where wtm_emp_id = " & rst5!trc_emp_id & " and CDbl(wtm_date) = " & CDbl(rst5!trc_date)) ' µèÒ§ ¡çà·Õº¡ÑºÍÕ¡µÒÃÒ§ àªè¹¡Ñ¹

' àÁ×èÍà·ÕºáÅéÇÁÒ´ÙÇèÒ ¢éÍÁÙÅÍѹááÊØ´ à»ç¹ä»µÒÁà§×è͹ä¢ä˹
If rst!trc_duty_io = 1 And CDate("12:00") - CDate(rst!trc_time) > CDate("1:00") Then GoTo TimeIn ' morning - 10:59
If rst!trc_duty_io = 2 And CDate("13:00") - CDate(rst!trc_time) > CDate("0:00") Then GoTo BreakIn
If rst!trc_duty_io = 1 And CDate("12:00") - CDate(rst!trc_time) < CDate("0:00") Then GoTo BreakOut
If rst!trc_duty_io = 2 And CDate("13:00") - CDate(rst!trc_time) < CDate("0:00") Then GoTo TimeOut

TimeIn: ' begin working in morning
Do
rst2.Edit
rst2!wtm_timein = rst!trc_time ' ãËé¿ÔÅ´ìàÇÅÒà¢éÒ = àÇÅÒ¨Ò¡µÒÃÒ§ Time_Recorder ·Õèä´éàÅ×Í¡ÁÒµÒÁà§×è͹ä¢áÅéÇ
rst2.Update
rst.MoveNext
If rst.EOF Then Exit Do
' ¾Íä»àäʹµèÍä» ¡çãËéà·ÕºÍÕ¡ ä»àÃ×èÍÂæ ¨¹¡ÇèÒ àäʹ㹵ÒÃÒ§ Time_Reorder ¨ÐËÁ´
If rst!trc_duty_io = 2 And CDate("13:00") - CDate(rst!trc_time) > CDate("0:00") Then GoTo BreakIn
If rst!trc_duty_io = 1 And CDate("12:00") - CDate(rst!trc_time) < CDate("0:00") Then GoTo BreakOut
If rst!trc_duty_io = 2 And CDate("13:00") - CDate(rst!trc_time) < CDate("0:00") Then GoTo TimeOut
Loop

BreakIn: ' out to lunch or out work for morning
Do
' If rst!trc_duty_io = 2 And TimeValue("13:00") - rst!trc_time > 0 Then ' morning - 12:59
rst2.Edit
rst2!wtm_breakin = rst!trc_time
rst2.Update
rst.MoveNext
If rst.EOF Then Exit Do
'End If
If rst!trc_duty_io = 1 And CDate("12:00") - CDate(rst!trc_time) > CDate("1:00") Then GoTo TimeIn
If rst!trc_duty_io = 1 And CDate("12:00") - CDate(rst!trc_time) < CDate("0:00") Then GoTo BreakOut
If rst!trc_duty_io = 2 And CDate("13:00") - CDate(rst!trc_time) < CDate("0:00") Then GoTo TimeOut
Loop

BreakOut: ' become to working for afternoon
Do
' If rst!trc_duty_io = 1 And TimeValue("12:00") - rst!trc_time < 0 Then ' 12:01 - evening
rst2.Edit
rst2!wtm_breakout = rst!trc_time
rst2.Update
rst.MoveNext
If rst.EOF Then Exit Do
'End If
If rst!trc_duty_io = 1 And CDate("12:00") - CDate(rst!trc_time) > CDate("1:00") Then GoTo TimeIn
If rst!trc_duty_io = 2 And CDate("13:00") - CDate(rst!trc_time) > CDate("0:00") Then GoTo BreakIn
If rst!trc_duty_io = 2 And CDate("13:00") - CDate(rst!trc_time) < CDate("0:00") Then GoTo TimeOut
Loop

TimeOut: ' out normal working or out OT working
Do
'If rst!trc_duty_io = 2 And TimeValue("13:00") - rst!trc_time < 0 Then ' 13:01 - evening or out OT
rst2.Edit
rst2!wtm_timeout = rst!trc_time
rst2.Update
rst.MoveNext
If rst.EOF Then Exit Do ' ******************* ¤×ÍÇèÒ ÁѹÁÒ¨ºá¤èµÃ§¹Õé¹èФÃѺ (àËÁ×͹¡ÑºÁѹà¨Íá¤è 4 àäʹ «Öè§ã¹ Time_Recorder ÁÕÍÕ¡µÑé§àÂÍÐ) ¾Í¼ÁàÍÒ rst.EOF then exit DO ÍÍ¡ Áѹ¡çºÍ¡ no current record ´éÇ «Ö觤ÇÒÁ¨ÃÔ§ Áѹ¨Ðµéͧǹ ¨¹¡ÇèÒ ¨Ð¤Ãºàäʹ㹠Time_Recorder áÅéǵ͹ǹ¹Ñ鹡ç¨Ðµéͧ´Ö§¢éÍÁÙŵÒÁà§×èÍ¹ä¢ (´Ö§à©¾ÒпÔÅ´ìàÇÅÒ ¨Ò¡ Time_Recorder )ÁÒãÊè ã¹ Work_Time ´éÇÂ
'End If
If rst!trc_duty_io = 1 And CDate("12:00") - CDate(rst!trc_time) > CDate("1:00") Then GoTo TimeIn
If rst!trc_duty_io = 2 And CDate("13:00") - CDate(rst!trc_time) > CDate("0:00") Then GoTo BreakIn
If rst!trc_duty_io = 1 And CDate("12:00") - CDate(rst!trc_time) < CDate("0:00") Then GoTo BreakOut
Loop

rst5.MoveNext
Loop

rst.Close
rst2.Close
End Sub
4 @R05559
อะ ลืมคิดถึง ให้มันวน loop ต่อ เลยแฮะ (เขียนครอบไปอีกทีนี่เอง คิดมาตั้งนาน)

ทำได้แล้วล่ะครับ คุณ bb1 เอ้อ ว่าแต่ ทำไม ภาษาไทยของคุณ bb1 มันเละๆ อย่างนั้นน่ะคับ งงๆ

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