สอบถามวิธีการ นำข้อมูลที่ Filter ได้แล้ว ไปใส่ใน table ครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

16 ม.ค. 61 , 12:23:51
ตอบกลับ #16

สันติสุข

1. เอา SQL statement ที่ผมแก้ให้ ใส่เข้าไปแทนที่ของเดิมที่มีอยู่แล้วใน SQL View แล้วก็กด Save ครับ

2. สิ่งที่แนะนำคือ แทนที่จะรันแต่ Append Query เพียงอย่างเดียว ซึ่งก่อให้เกิดปัญหาคือถ้าทำ Append Query ที่ใช้เงื่อนไขเดียวกับที่มีก่อนหน้าซ้ำอีกครั้ง ข้อมูลใน tbEmployeeOT ก็จะเบิ้ล ก็เลยจะให้รัน Macro แทน ซึ่ง Macro ตัวนี้จะรัน Delete Query เพื่อลบสิ่งที่กำลังจะถูกเพิ่มเข้าไปใน tbEmployeeOT เสียก่อน แล้ว Macro ก็จะรัน Append Query ตัวเดิมต่อไป

Detele Query จะมีคำสั่งเป็น DELETE * FROM tbEmployeeOT WHERE ...ซึ่งมีเงื่อนไขเดียวกันกับใน Append Query... . SQL คุณบอกก่อนหน้านี้ว่า "พอ insert แล้ว insert ซ้ำ ข้อมูลจะเบิ้ล" ดังนั้นวิธีที่ผมแนะนำก็คือ ถ้าเผลอไปกด insert อีกรอบ ลบของที่บันทึกไปแล้ว
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 

16 ม.ค. 61 , 12:28:21
ตอบกลับ #17

สันติสุข

แก้ไข : คำตอบ #16 แกไขย่อหน้าสุดท้ายเป็น

Detele Query จะมีคำสั่งเป็น DELETE * FROM tbEmployeeOT WHERE <เงื่อนไขซึ่งเหมือนกับใน Append Query>
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 

16 ม.ค. 61 , 14:13:02
ตอบกลับ #18

tomkungz

  • สมาชิกไท.Access
  • กระทู้: 24

    • ดูรายละเอียด

ตอนนี้ลำดับเป็นแบบนี้ครับ
1. กำหนดช่วงวันที่ ที่ต้องการดุรายงาน กด Open form
2. Form query ข้อมูลโดยกรองตามวันที่ โดยวิธีการ Append ข้อมูลไปในตารางEdit
3. จากนั้นแก้ไข ตัวเลขให้เรียบร้อย และกดปุ่ม Finish
4. ปุ่ม finish กำหนด command ไว้ดังนี้
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "QEditFinish"  >> นำข้อมูลที่แก้แล้วในตารางEdit ไป append ลง ตาราง QFinish
    DoCmd.OpenQuery "QDelete"  >> ลบข้อมูลในตาราง Edit ออก
    DoCmd.SetWarnings True
    DoCmd.Close
5. จากนั้นทดสอบรันวันที่เดิม เพื่อตรวจสอบ
6. เมื่อกดปุ่ม finish รอบนี้ ระบบ มีข้อมูลซ้ำ คือ ชื่อคน และวันเวลาเดียวกัน อย่างละ 2 บรรทัด แต่ยอดการแก้ไขเงินไม่เหมือนกัน

ในขั้นตอนสุดท้ายตอนกด finish ผมจะต้องตรวจสอบข้อมูลใน table finish ยังไงครับว่า ถ้าวันเวลาซ้ำ ให้ทับไป ถ้าไม่มี ก็ให้ append ไป


 

16 ม.ค. 61 , 15:18:50
ตอบกลับ #19

สันติสุข

ผมอ่านแล้วยิ่งไม่เข้าใจ เหมือนสิ่งที่คุณทำมันแตกต่างจากที่บอกเริ่มแรก(หรือเปล่า?) เอาอย่างนี้นะครับ จุดที่ผมพยายามแก้ไขอยู่ตอนนี้คือจากปัญหาใน
อ๋อ ตอนแรกผมอ่านไม่เข้าใจ ลองทำแล้วใช้ได้ครับ ขอบคุณครับ
ตอนนี้ติดปัญหา พอ insert แล้ว insert ซ้ำ ข้อมูลจะเบิ้ล เราควรให้คิวรี่เช็คข้อมูลในตารางก่อนหรือป่าวครับ
เท่านั้น

ผมเข้าใจคือ คุณจะเอาข้อมูลจาก dbo_ViewTimeOTMonthly ไปลง tbEmployeeOT 
ทีนี้คุณบอกว่าถ้าทำ Append Query ที่ผมบอกแล้วครั้งนึง แล้วไปทำซ้ำ(ใช่ไหม ?) ข้อมูลก็จะเบิ้ล
ผมก็เลยแนะนำว่า คุณก็ทำ Delete Query เพื่อลบข้อมูลใน tbEmployeeOT *** เสียก่อน ***
แล้วเราลบอะไร...เราก็จะลบข้อมูลที่กำลังเตรียมจะ Append ในขั้นตอนต่อไป
ดังนั้นพอคุณทำ Append จริงๆ ยังไงข้อมูลนั้นก็จะไม่เบิ้ล ถูกไหมครับ

สรุปคือ Delete ข้อมูลใน tbEmployeeOT ก่อน แล้วค่อย Append
คุณลองเช็คดูแล้วกันว่าตรงกับที่ผมบอกไหม
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 

16 ม.ค. 61 , 15:21:01
ตอบกลับ #20

tomkungz

  • สมาชิกไท.Access
  • กระทู้: 24

    • ดูรายละเอียด

นี่คือสูตร Query ที่ใช้ลบค่าซ้ำครับ แต่เหมือนว่าจะลบเฉพาะบรรทัดที่ เลือกอยู่
DELETE tbEmployeeOTSummary.Emp_ID, tbEmployeeOTSummary.Emp_Date, tbEmployeeOTSummary.Emp_Timein, tbEmployeeOTSummary.Emp_Timeout
FROM tbEmployeeOTSummary
WHERE (((tbEmployeeOTSummary.Emp_ID)=[Forms]![FormEdit]![Emp_ID].[value]) AND ((tbEmployeeOTSummary.Emp_Date)=[Forms]![FormEdit]![Emp_Date].[value]) AND ((tbEmployeeOTSummary.Emp_Timein)=[Forms]![FormEdit]![Emp_Timein].[value]) AND ((tbEmployeeOTSummary.Emp_Timeout)=[Forms]![FormEdit]![Emp_Timeout].[value]));



 

16 ม.ค. 61 , 15:26:53
ตอบกลับ #21

tomkungz

  • สมาชิกไท.Access
  • กระทู้: 24

    • ดูรายละเอียด

คือแบบนี้ครับ ผมเข้าใจว่า พี่ต้องการให้ผมลบก่อนที่จะ append ใหม่ ทีนี้ ที่ผมไปต่อไม่ถูกคือ ขอลำดับใหม่ก่อนนะครับ

1. กรองเลือกวันที่ จาก dbo_ViewTimeOTMonthlyมาแล้วใช้วิธี append ข้อมูลจาก tbEmployeeOTSummary ไปลงใน tbEmployeeOT
2. จากนั้นผมแก้เวลาใน tbEmployeeOT เป็นค่าที่ผมต้องการ
3. ผมต้องการนำค่าที่แก้ไขนี้ไปเก็บในตารางใหม่ ผมจึง append อีกรอบนึงไปใส่ในตารางที่ชื่อว่า tbEmployeeOTSummary ซึ่งเป็นที่เก็บข้อมุลที่เสร็จแล้วรวมๆกันแบบถาวร ซึ่ง เก็บไว้เป็นปีๆ เลยครับ จากนั้นก็ ลบข้อมูลใน tbEmployeeOT เพื่อที่จะรอการ กรองวันที่ครั้งใหม่ ซึ่งอาจจะซ้ำก็ได้
4. ถ้าซ้ำ ก็จะต้องไปลบข้อมูลใน tbEmployeeOTSummary ก่อน แล้วนำค่าใหม่ จาก tbEmployeeOT ไปใส่แทน

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

 

16 ม.ค. 61 , 15:33:59
ตอบกลับ #22

tomkungz

  • สมาชิกไท.Access
  • กระทู้: 24

    • ดูรายละเอียด

อ้างถึง
Detele Query จะมีคำสั่งเป็น DELETE * FROM tbEmployeeOT WHERE ...ซึ่งมีเงื่อนไขเดียวกันกับใน Append Query... . SQL คุณบอกก่อนหน้านี้ว่า "พอ insert แล้ว insert ซ้ำ ข้อมูลจะเบิ้ล" ดังนั้นวิธีที่ผมแนะนำก็คือ ถ้าเผลอไปกด insert อีกรอบ ลบของที่บันทึกไปแล้ว

ผมเพิ่งเข้าใจประโยคนี้ครับ ขออภัยเป็นอย่างสูง คำตอบชัดเจนตั้งแต่ตรงนี้แล้ว ผมคิดเยอะไป ขออภัยด้วยครับ ตอนนี้ทำได้แล้ว

 


บอร์ดเรียนรู้ Access สำหรับคนไทย