เรื่องการเปลี่ยนแปลงค่าแรงครับ
กระทู้เก่าบอร์ด อ.Yeadram

 4,314   18
URL.หัวข้อ / URL
เรื่องการเปลี่ยนแปลงค่าแรงครับ

เรียนคุณสันติสุข และผู้รู้ทุกท่าน เนื่องจากเดือนเมษายนนี้ จะมีการปรับค่าแรงขั้นต่ำทั่วประเทศ ผมขอปรึกษาโปรแกรม Access ดังนี้ครับ
- ในฐานข้อมูล
   รหัส    คำนำหน้า ชื่อ-นามสกุล          ค่าแรง(บาท)
440001 นาย           สมภพ มีบุญ        200
440002 นาย           บุญมี ดีมาก          210
440003 นาย           เขียว แดงมาก      220
ผมทำค่าแรงมาได้ 2 เดือนแล้ว(มค.,กพ.) ผมขอถามว่า มีทางไหนบ้าง ที่เราจะเปลี่ยนค่าแรงของแต่ละคน โดยที่ข้อมูลเก่าไม่เปลี่ยนแปลงครับ ต้องกำหนดตรงส่วนไหนบ้างครับ
(ฟิลด์ "ค่าแรง" อยู่ในตาราง " ฐานข้อมูล" ไม่ได้แยกตาราง)




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

1 @R12323
"เปลี่ยนค่าแรงของแต่ละคน โดยที่ข้อมูลเก่าไม่เปลี่ยนแปลง" อ่านแล้วงงครับ จะให้เปลี่ยนที่ฟิลด์ไหนเทเบิลไหน แล้วฟิลด์ไหนเทเบิลไหนที่ยังคงเดิม
2 @R12331
ยกตัวอย่างนะครับ
ณ.ปัจจุบัน ผมได้ค่าแรงวันละ 200 บาท แต่เดือนเมษายนที่จะถึงนี้ ผมได้ปรับค่าแรงอีก วันละ 20 บาท รวมเป็น 220 บาท
คำถามคือ เป็นไปได้หรือไม่ครับ ในโปรแกรมฐานข้อมูล Access จะยังคงค่าแรงวันละ 200 ตั้งแต่เดือน ม.ค. - มี.ค. และตั้งแต่เดือน เม.ย. เป็นต้นไป ค่าแรงเปลี่ยนเป็นวันละ 220 บาท โดยที่เรา คีย์ข้อมูลในตารางเดียวกัน เพราะว่าถ้าผมเปลี่ยนค่าแรง จาก 200 เป็น 220 บาท ข้อมูลเดือน ม.ค. - มี.ค. ก็จะเปลี่ยนเป็น 220 บาท
จาก ตาราง ฐานข้อมูล ในฟิลด์ Salary ครับ
ข้อมูลเดิม
Table "ฐานข้อมูล"          ฟิลด์
                                    Salary
นายเอ                            200

เปลี่ยนเป็น
                                    Salary
นายเอ                             220

หรือว่าเราจะต้อง copy เดือน ม.ค. - มี.ค. ไปไว้อีก 1 Table ครับ
ปล.อย่าเพิ่ง "งง" นะครับ

3 @R12332
ถ้าในเทเบิล "ฐานข้อมูล" มีฟิลด์ที่บอกได้ว่า

ค่าแรงนั้นเป็นของเดือนอะไร

หรือ

อยู่ในช่วงเดือนอะไร เช่นอาจบอก เดือน/ปี ที่เริ่มใช้ค่าแรงนี้ จนถึง เดือน/ปี ที่สิ้นสุดการใช้ค่าแรงนี้

อย่างนี้ก็ทำได้ครับ แต่ถ้าไม่มีฟิลด์อะไรระบุเพื่อแยกแยะออกมาได้ ก็ทำไม่ได้ครับ

ฟิลด์ 1 ฟิลด์ในเรคอร์ดเดียวกันในเทเบิลเดียวกันจะมีหลายค่าไม่ได้ ผิดกฏของฐานข้อมูลครับ
4 @R12354
1. Back up
2. เปลี่ยนเลยครับ (ไม่ต้องกลัว)
3. ตรวจสอบข้อมูล

ถ้าข้อมูลเก่่ายังอยู่ แปลว่าทำถูกแล้ว จบ
ถ้าข้อมูลเก่าไม่อยู่ แปลว่าไม่ถูก เอาตัว back up กลับมาใช้ แล้วค่อย post มาถามกันใหม่
5 @R12358
ค่าแรงผมทำเป็นงวดครับ
ตาราง(บันทึกประจำวัน)
ID        งวด       วันที่        เดือน       ปี       ชม.ทำงาน............
001       01        1             01        02          8
001       02        16           01        02          8


ตาราง(งวด)
01     1-15
02     16-31
03     1-15
04     16-28/29
05     1-15
06     16-31

ตาราง(เดือน)
01      มกราคม
02      กุมภาพันธ์
03      มีนาคม

ตาราง(ปี)
01      2554
02     2555
03      2556

ประมาณนี้ครับ

6 @R12360
ถ้าการออกแบบฐานข้อมูลเป็นอย่างนี้ มันมีวิธีแก้ไขเทเบิลได้ประมาณ 3 วิธีคือ

1) เอาฟิลด์ Salary ในเทเบิล "ฐานข้อมูล" มาก๊อปปี้ใส่ลงในเทเบิล "บันทึกประจำวัน" ด้วย ส่วนเทเบิล "ฐานข้อมูล" ก็เก็บเฉพาะค่าแรงปัจจุบันเท่านั้น

หรือ

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

หรือ

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

สรุป 1) ง่ายสุดแต่ดูเหมือนมีข้อมูลซ้ำซ้อน 2) ข้อมูลไม่ซ้ำซ้อน มีประสิทธิภาพปานกลาง 3) ข้อมูลไม่ซ้ำซ้อน มีประสิทธิภาพสูง แต่ยุ่งยากหน่อยในการหาว่าค่าแรงของแต่ละคนในเดือน/ปีที่ต้องการทราบ มีค่าเป็นเท่าไหร่

เลือกวิธีแก้ไขเทเบิลแล้ว แก้ไขเสร็จแล้ว ค่อยมาแก้ไขข้อมูลทีหลัง
7 @R12364
ผมบอกผิดแล้ว ถ้าไปแก้เทเบิล "ฐานข้อมูล" อย่างที่ว่าในข้อ 2) หรือ 3) กลับจะทำให้มันซ้ำซ้อน ถ้าจะทำอย่างข้อ 2) หรือ 3) ต้องไปเพิ่มอีกเทเบิล ชื่อ "ค่าแรง" แล้วกัน ถ้าเป็นข้อ 2) ให้มีฟิลด์ ID, เดือน, ปี, ค่าแรง ถ้าเป็นข้อ 3) ให้มีฟิลด์ ID, เดือนเริ่มต้น, ปีเริ่มต้น, เดือนสิ้นสุด, ปีสิ้นสุด, ค่าแรง
8 @R12365
ผมจะลองทำดูก่อนนะครับ ว่าจะใช้ข้อไหน
9 @R12379
ผมลองทำตาม R12364 ข้อที่ 2 แจ้งผลดังนี้ครับ
1.ผมสร้าง เทเบิล "ค่าแรง"

ID    MonthID      YearID        Salary1

2. สร้าง Form กำหนด ฟิลด์จาก เทเบิล"ค่าแรง"
"เขตข้อมูลหลัก"
   ID             5407000
MonthID       03
YearID        02
Salary1        250

"เขตข้อมูลย่อย"
งวด วันที่   ชม.ทำงาน    OT1    OT1.5   OT2   OT3 ค่ารถ ค่ากะ ............
05      1           8              

3.ทดลองคีย์ข้อมูลแล้วไปแก้ไข ฟิลด์ "Salary" ใน Query เป็น "Salary1" ไปเปิด Report ดูแล้ว ข้อมูลถูกต้องครับ



4. ผมมาคีย์ข้อมูลเพิ่มใน Form ติดปัญหาตรง "งวด" ใน "เขตข้อมูลย่อย"ครับ (เพราะว่า 1 เดือน มี 2 งวด ) พอคีย์ข้อมูลหลักแล้ว มันขึ้นข้อมูลเก่ามาครับ(งวด05) ถ้าผมต้องการให้ ฟิลด์ "งวด" ไปเป็น "เขตข้อมูลหลัก" ได้หรือไม่ครับ
"เขตข้อมูลหลัก"
ID             5407000
MonthID       03
YearID        02
Salary1        250
Period          06(ฟิลด์ที่ต้องการเพิ่ม)




จากรูปภาพนะครับ
5. "เชื่อมโยงเขตข้อมูลหลัก" ใส่ฟิลด์ได้แค่ 3 ฟิลด์หรือครับ
10 @R12380

ขอโทษครับ ลงรูปภาพซ้ำ อีกรูปคือรูปนี้ครับ
11 @R12381
เอาอย่างนี้ ผมถามก่อนว่า ตาราง "บันทึกประจำวัน" คุณจะบันทึกการทำงานของแต่ละคนในทุกๆวัน หรือว่า งวดนึงบันทึกครั้งนึง
12 @R12385
ตาราง"บันทึกประจำวัน" บันทึกทุกวันครับ

ตามภาพเลยครับ
ปัจจุบัน ผมบันทึกลงในตารางโดยตรง เพราะว่าผมยังทำ Form ไม่ได้ดั่งใจคิดครับ ต้องคีย์ทีละวัน ถ้าได้เป็น "งวด" ก็จะไวขึ้นครับ ไม่คีย์ข้อมูลซ้ำกันหลายรอบ
เช่น ระบุงวด "01"(1-15 มกราคม) ก็ให้โชว์ วันที่ 1 2 3 4 5 ถึง 15 เลยครับ
13 @R12386
จากที่ดูตามรูป สำหรับเดือน ปี และคนคนเดียวกัน วันที่ 1-15 อาจไม่จำเป็นต้องเป็นงวดเดียวกันก็ได้ ทำให้ผมไม่แน่ใจความหมายของงวดว่าหมายถึงอย่างไรกันแน่ ทำไมช่วงเดียวกันถึงไม่ได้เป็นงวดเดียวกัน

ยังไงก็ตาม การที่จะเอา "งวดที่" ไปใส่ไว้ในตาราง "ค่าแรง" นั้น มันหมายถึงว่าค่าแรงที่เขาได้รับ มันจะขึ้นกับงวดด้วย ในเดือนปีเดียวกัน คนเดียวกัน ต่างงวดกัน อาจมีค่าแรงต่างกันได้ ถ้าเป็นตามความหมายนี้ก็ทำไปได้เลย

แต่ถ้าค่าแรงในเดือนปีเดียวกัน สำหรับคนเดียวกัน ไม่ว่างวดไหนๆก็เท่ากันอยู่แล้ว เราก็ไม่ควรเอา "งวดที่" ไปใส่ในตาราง "ค่าแรง" เพราะทำให้ข้อมูลซ้ำซ้อนแน่ ในกรณีอย่างนี้ ถึงแม้ใน main form จะมีช่องให้ป้อน "งวดที่" แต่มันจะไม่ได้ผูกเข้ากับฟิลด์ใดๆในตาราง "ค่าแรง" การป้อนงวดที่ใน main form จะใช้เพื่อวัตถุประสงค์ในการแสดง sub form เฉพาะตามงวดที่ที่เราได้เลือกใน main form เท่านั้นเอง
14 @R12389
"ยังไงก็ตาม การที่จะเอา "งวดที่" ไปใส่ไว้ในตาราง "ค่าแรง" นั้น มันหมายถึงว่าค่าแรงที่เขาได้รับ มันจะขึ้นกับงวดด้วย ในเดือนปีเดียวกัน คนเดียวกัน ต่างงวดกัน อาจมีค่าแรงต่างกันได้ ถ้าเป็นตามความหมายนี้ก็ทำไปได้เลย " ตามนี้เลยครับ เพราะว่าทางโรงงานถ้ามีการเปลี่ยนแปลงหรือเพิ่มเติมเกี่ยวกับค่าแรง/คน ก็จะระบุมาให้ผมแก้ไขตามครับ สรุป ค่าแรง/คน ไม่ตายตัวครับ

R12379 คำถามที่ 4 ผมต้องดำเนินการอย่างไรครับ ที่จะเพิ่มฟิลด์ "งวดที่"
15 @R12398
ก็ใส่ Catagory;MonthID;Year;Salary1 ลงในช่อง เชื่อมโยงเขตข้อมูลหลัก ส่วนช่อง เชื่อมโยงเขตข้อมูลย่อย ก็ใส่เหมือนๆกัน (แต่ชื่อ Salary1 อาจเปลี่ยนไปตามที่คุณได้สร้างไว้)

ปล. วันหลังเปลี่ยนเมนูจากภาษาไทยเป็นอังกฤษดีกว่านะครับ ใช้ศัพท์ภาษาไทยแล้ว บ่อยๆที่ไม่ค่อยรู้เรื่อง
16 @R12402

"ลง 2003 อังกฤษ ใหม่ครับ ผมก็งงเหมือนกัน(ที่งง เพราะแปลไม่ออก)ไม่รู้อยู่ตรงไหน ที่ post กัน มีแต่ชื่อภาษาอังกฤษ
เข้าเรื่องครับ จากรูปภาพ ความต้องการคือ
เมื่อคีย์ข้อมูลถึงวันที่สุดท้ายเสร็จแล้ว กด NewRecord ให้เคอเซอไปอยู่ช่อง "Emp" ต้องใช้คำสั่งเพิ่มเติมอย่างไรครับ หรือต้องทำอย่างไร ที่ง่ายต่อการคีย์ครับ"
ขอโทษอีกครั้งครับ Post ผิดคำถาม
17 @R12403
กำหนด Navigation Buttons property ของฟอร์มให้เป็น Yes ครับ    มันก็จะมีปุ่มสำหรับเลื่อนเรคอร์ดอยู่ที่ขอบล่างซ้ายของฟอร์มเอง เราก็ไม่ต้องไปสร้างปุ่มอะไรเองอีกแล้ว

เรื่องภาษาอังกฤษแปลไม่ออก เปิดดิกชันนารี่เอาครับ ต้องฝึกไว้ เพราะคอมพิวเตอร์มันเป็นศาสตร์ของฝรั่ง ถ้าเราเอ่ยคำศัพท์ภาษาอังกฤษทุกคนในโลกส่วนใหญ่จะเข้าใจ แต่ถ้าคุณติดแต่ศัพท์ไทย จะมีน้อยคนที่เข้าใจแน่ชัดว่ามันคืออะไร ก็เป็นไปได้ว่าอาจเดาได้ แต่ก็ไม่มีทางมั่นใจว่าถูกต้องหรือไม่ และมันจะเป็นอุปสรรคสำคัญต่อไปในการเรียนรู้/ถามปัญหาครับ
18 @R12418
ขอบคุณครับ สำหรับคำแนะนำ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3434s