รบกวนสอบถามต่อกระทู้เดิม
กระทู้เก่าบอร์ด อ.Yeadram

 1,209   9
URL.หัวข้อ / URL
รบกวนสอบถามต่อกระทู้เดิม

ขั้นตอนการทำงานนะค่ะ
1. ให้คุณครูกรอกข้อมูลพื้นฐานของแต่ละวิชาก่อน ได้แก่ รหัส หน่วยกิต ครูผู้สอน และเต็มคะแนนแต่ละจุดประสงค์

2. วัดผลลงทะเบียนเรียนให้แต่ละวิชา จากนั้น Export เป็น Excel ลักษณะจะเป็น
ID    aName    Unit1   Unit2     Unit3
01     A   
02     B
03     C

เพื่อให้คุณครูนำไปกรอกคะแนนดิบ ของแต่ละจุดประสงค์ คะแนนกลางภาค คะแนนปลายภาค คะแนนอ่านคิดวิเคราะห์ และคะแนนคุณลักษณะค่ะ
3. เมื่อคุณครูกรอกคะแนนเรียบร้อยแล้วลักษณะจะเป็นแบบนี้ค่ะ
ID    aName    Unit1   Unit2     Unit3
01     A              7        8             9
02     B               8        9            10
03     C              9          8            7

คุณครูจะต้องส่งคะแนนของตนด้วยการนำเข้าข้อมูลในตัวโปแกรมอีกครั้ง โดยการนำเข้าแบบผนวกข้อมูลลงในตารางให้ตรงกับวิชาของตนเอง
4. ปัญหาเกิดขึ้นตอนนี้ค่ะ เพราะตารางลงทะเบียนแต่ละวิชาเราจะมีข้อมูลการลงทะเบียนอยู่เเล้ว ขาดแต่คะแนนใช่มั้ยค่ะ ถ้าเรา ผนวกข้อมูลเข้าไปมันจะมีลักษณะแบบนี้ค่ะ

ID    aName    Unit1   Unit2     Unit3
01     A   
02     B
03     C
01     A              7        8             9
02     B              8        9            10
03     C              9        8            7

แต่ถ้าตั้ง ID เป็น คีย์หลัก แล้วข้อมูลจะไม่ยอมเข้ามาในตารางค่ะ จะทำอย่างไรให้มันลบข้อมูลเดิมออกก่อน โดยที่คุณครูไม่ต้องเข้าถึงดีไซด์ของโปรแกรมเพื่อไปลบข้อมูล

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

1 @R15700
จริงผมก็อยากรีบตอบวันนี้นะ เพราะเป็นวันที่ผมยังหยุดอยู่
คืออย่างนี้หรือเปล่าครับ ผมเสนอแนวคิดอย่างนี้ดู
1. ไฟล์ต้นฉบับสมมุติชื่อ Original.mdb ของคุณมีตารางรายวิชาไว้ครบแล้ว เช่น
tb_วิชาที่1
tb_วิชาที่2
tb_วิชาที่3
ซึ่งในแต่ละตารางยังมีข้อมูลเพียง
ID    aName    Unit1   Unit2     Unit3
01     A    
02     B
03     C

2. คุณทำไฟล์ใหม่รายวิชา สมมุติชื่อ T1.mdb ซึ่งมีตาราง tb_วิชาที่1 ให้คุณครูคนที่ 1 ไปใส่คะแนน เช่นกัน ไฟล์ชื่อ T2.mdb ซึ่งมีตาราง tb_วิชาที่2 ให้คุณครูคนที่ 2 ไปใส่คะแนน อย่างนี้ตามลำดับ
ซึ่งคุณครูก็จะใส่ข้อมูลในส่วนของท่านมา
ID    aName    Unit1   Unit2     Unit3
01     A              7        8             9
02     B               8        9            10
03     C              9          8            7

3. copy ไฟล์ทั้ง 1 และ 2 และ 3.mdb จากคุณครูที่ใส่ข้อมูลแล้ว มาไว้ในโฟลเดอร์เดียวกับไฟล์ Original.mdb ของเรา

4. เรียกไฟล์ Original.mdb ของเรา เราจะสร้างฟอร์มๆนึง ซึ่งเมื่อเรากดปุ่มแล้ว ข้อมูลจากไฟล์ 1.mdb ในตาราง tb_วิชาที่1 ในฟิลด์ Unit1 และ Unit2 และ Unit3 จะถูกใส่ลงในตาราง tb_วิชาที่1 ของไฟล์เรา ในชื่อฟิลด์เดียวกันที่ว่างอยู่ โดยเงื่อนไขคือ เรคคอร์ด ID ที่เท่ากัน และไฟล์ 2.mdb ในตาราง tb_วิชาที่2 ก็ทำเช่นกัน ไปเรื่อยๆจนครบ

อย่างนี้ใช้ได้หรือเปล่าครับ หรือต้องแก้ไขอย่างไร
ปล. ผมต้องปรับให้เข้าใจตรงกันให้ได้ก่อน ผมถึงจะเขียนโค๊ดถูก
2 @R15702
อยากลองทำดูนะคะ
แต่ปุ่มทำอย่างไร เงื่อนไขทำอย่างไรคะ
ไม่มีความรู้เกียวกับ    code ปกติทำ access
จะใช้คำสั่งง่าย ๆ ในคิวรี่คะ
3 @R15703
ตกลงที่ผมเสนอแนวคิดไป ถูกต้องตามที่ต้องการหรือเปล่าครับ
4 @R15705
หากอยากลองศึกษาทำเองดู งั้นผมทิ้งแนวคิดแบบว่าประมาณถ้าเป็นผมทำ ให้อ่านดูนะครับ
อันดับแรก
- ผมมีตารางแบบนี้ สมมุติชื่อ Tb_template เป็นคล้าย Template เพื่อแจกให้คุณครูแต่ละวิธีเอาไปใส่คะแนน
-------------------------------------------
ID    aName    Unit1   Unit2     Unit3
01     A    
02     B
03     C
-------------------------------------------
- แต่ผมมีตารางจริงสำหรับรายวิชา 1,2,3... ชื่อ T1,T2,T3 อยู่ด้วย

- ผมจะสร้างฟอร์มเปล่าๆ ไม่ผูกกับฐานข้อมูลใดๆ ขึ้นมา 1 ฟอร์ม สมมุติชื่อ Form1
- ผมสร้างปุ่มขึ้นมา 1 ปุ่ม (หากมี Wizard ให้กด Cancel ไป) ปุ่มนี้ผมจะทำเพื่อ Export ตาราง Tb_template ออกเป็นไฟล์ Excel แจกให้คุณครู สมมุติ 3 ท่าน โดยจะให้มีชื่อไฟล์ Excel ว่า T1.xls, T2.xls, T3.xls
- ใส่โค๊ดลงในปุ่มที่1 นี้ โดยใส่ใน Property ของปุ่ม > Event > On Click ดังนี้:
    DoCmd.OutputTo acOutputTable, "Tb_template", acFormatXLS, CurrentProject.Path & "\T1.xls"
    DoCmd.OutputTo acOutputTable, "Tb_template", acFormatXLS, CurrentProject.Path & "\T2.xls"
    DoCmd.OutputTo acOutputTable, "Tb_template", acFormatXLS, CurrentProject.Path & "\T3.xls"


- เมื่อผมรันฟอร์ม และกดปุ่มที่ 1 นี้ ผมจะได้ไฟล์ Excel ขี้นมา 3 ไฟล์ ชื่อ T1.xls, T2.xls, T3.xls อยู่ในโฟลเดอร์เดียวกับไฟล์ MS Access ที่ผมใช้งานอยู่นี่แหละ

อันดับสอง
- ผมแจกไฟล์ T1.xls ให้กับคุณครูท่านที่ 1 แจกไฟล์ T2.xls ให้กับคุณครูท่านที่ 2 และแจกไฟล์ T3.xls ให้กับคุณครูท่านที่ 3 นำไปใส่ค่าคะแนน Unit ต่างๆ
- เมื่อเสร็จ นำไฟล์กลับมา Copy ทับลงในไฟล์เดิม ในโฟลเดอร์เดิมทั้ง 3 ไฟล์

อันดับสาม
- เรียกไฟล์ MS Access ขึ้นมา ในฟอร์ม Form1 ที่สร้างไว้ ให้สร้างปุ่มเพิ่มอีกปุ่ม เป็นปุ่มที่ 2 ปุ่มนี้ผมจะทำการ Import ไฟล์ Excel ทั้ง 3 ไฟล์ เข้ามาเป็นตารางใหม่เลย ให้ชื่อ tT1, tT2, tT3 โดยจุดประสงค์เพื่อนำค่าใน tT1 ใส่ลงในตารางจริง T1 และ tT2 ใส่ลงในตารางจริง T2 และ tT3 ใส่ลงในตารางจริง T3 โดยใช้คำสั่ง UPDATE ... INNER JOIN คือการอัพเดทข้อมูลระหว่างตารางกับตาราง เสร็จแล้วผมจะทำการลบตาราง tT1, tT2, tT3 ทิ้งไป เพื่อไม่ให้งงภายหลัง
- โดยใส่โค๊ดลงในปุ่มที่ 2 ใน Property > Event > On Click ดังนี้:
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "tT1", CurrentProject.Path & "\T1.xls", True
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "tT2", CurrentProject.Path & "\T2.xls", True
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "tT3", CurrentProject.Path & "\T3.xls", True

    Dim strSQL As String
    DoCmd.SetWarnings False
    strSQL = "UPDATE T1 INNER JOIN tT1 ON T1.ID = tT1.ID SET T1.Unit1 = tT1.Unit1, T1.Unit2 = tT1.Unit2, T1.Unit3 = tT1.Unit3;"
    DoCmd.RunSQL strSQL
    strSQL = "UPDATE T2 INNER JOIN tT2 ON T2.ID = tT2.ID SET T2.Unit1 = tT2.Unit1, T2.Unit2 = tT2.Unit2, T2.Unit3 = tT2.Unit3;"
    DoCmd.RunSQL strSQL
    strSQL = "UPDATE T3 INNER JOIN tT3 ON T3.ID = tT3.ID SET T3.Unit1 = tT3.Unit1, T3.Unit2 = tT3.Unit2, T3.Unit3 = tT3.Unit3;"
    
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
    DoCmd.DeleteObject acTable, "tT1"
    DoCmd.DeleteObject acTable, "tT2"
    DoCmd.DeleteObject acTable, "tT3"


- จากนั้นผมรันฟอร์ม Form1 แล้วกดปุ่มที่ 2
- หากไม่ผิดพลาด หากผมกลับไปเปิดตาราง T1 และ T2 และ T3 จะมีคะแนนในฟิลด์ Unit1, 2,3 เหมือนตามไฟล์ที่คุณครูแต่ละท่านใส่คะแนนมาให้

หลักๆก็ประมาณนี้ ผมไม่รู้ว่าจะอธิบายได้เข้าใจมากน้อยแค่ไหนนะครับ แต่ลองทำความเข้าใจกับคำสั่งๆ ที่ผมเขียนดู มันปรับใช้อย่างที่คุณต้องการได้ครับ
5 @R15706
ขอบคุณมาก ๆ เลยค่ะคุณ TTT จะลองทำดูนะคะมีความคืบหน้าอย่างไรแล้วจะนำรายงานนะค่ะ
***แต่เกิดแนวคิดใหม่ว่า หากเราทำแยกไฟล์ Access ออกเป็นไฟล์ละ 1 วิชา
ให้สามารถคำนวนและพิมพ์รายงานผลรายวิชานั้น ๆ ได้เลย ดีมั้ยค่ะ
***จากนั้นค่อยส่งตารางคะแนนมายังไฟล์ของห้อง ซึ่งมีตารางไว้เพื่อเก็บคะแนนทุกวิชารวมไว้ในตารางเดียว
***จากนั้นใช้คิวรี่ประมวลผล และรายงานผลคะแนนรายบุคคลเลยดีมั้ยค่ะ
***ปัญหามีอยู่ที่ว่า การ Importข้อมูลจาก Access มันจะมาเป็นตารางเลย มันผนวกข้อมูลไว้ในตารางที่มีอยู่แล้วไม่ได้อีกอะคะ ทำไงดีหละค่ะ

6 @R15707
ผมลองทดสอบเพื่อจะนำไปพัฒนากับระบบตัวเอง พบว่า ตาราง T1 T2 และ T3 ไม่มีการ Update เข้าไปเลยครับ แต่ถ้าผมแก้ไข code ไม่ให้ลบ Table tT1 - 3 ข้อมูลเข้าครับ แต่ไม่ไปอัพเดจที่ T1 - T3 ครับ ยังหาสาเหตุไม่เจอครับ
7 @R15708
ถามเพิ่มเติมครับ กรณี Export ถ้าเราต้องการให้ตัวหนังสือเป็นสีขาว พื้นสีฟ้า แล้วสลับอีกแถวเป็นพื้นสีขาว ตัวหนังสือสีเขียว สลับไปเรื่อย ๆ จนกว่าข้อมูลจะหมด พอจะเขียนคำสั่งได้หรือเปล่าครับ ขอบคุณครับ
8 @R15709
คือในตาราง T1, T2, T3 ที่ผมยกตัวอย่าง จะต้องมีค่าอยู่แล้ว (ตามโจทย์ที่ผมเข้าใจ) เช่นใน T1 ก็จะมีข้อมูลก่อนอัพเดทไฟล์ Excel ประมาณนี้ครับ

ID    aName    Unit1   Unit2     Unit3    ฟิลด์อื่นๆ...
01     A                                                 D...
02     B                                                 C...
03     C                                                 F...

- ซึ่งฟิลด์อื่นๆ ในตาราง T1,2,3 เราไม่สนใจ
- หลังการอัพไฟล์ Excel ให้ได้ค่าลงไปที่ฟิลด์ Unit1,2,3 ตามเงื่อนไขที่ว่า ID ตรงกัน จะได้ค่าเมื่อเสร็จขั้นตอนดังนี้

ID    aName    Unit1   Unit2     Unit3    ฟิลด์อื่นๆ...
01     A              6          7          5        D...
02     B              7          8          9        C...
03     C              6          9          7        F...

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