fmmanchan โพสต์ 2018-7-9 15:37:32

เวลาบันทึกข้อมูลลงฐานข้อมูล เราบันทึกโดยใช้ Transaction ของ VB6 ได้หรือไม่

แก้ไขครั้งสุดท้ายโดย fmmanchan เมื่อ 2018-7-9 16:24

เวลาบันทึกข้อมูลลงฐานข้อมูล เราบันทึกโดยใช้ Transaction ของ VB6 ได้หรือไม่ เพราะเท่าที่ลองกรณีเป็น multi user ถ้าเราลองบันทึก ดูจะติดตอนที่เรา ทำ begin tran ถ้าเรา pause ไว้ debug อยู่ อีกเครื่องดึงรายงาน table ที่เรากำลังบันทึกปรากฏว่า เรียกรายงานไม่ได้เลยต้องรอให้บันทึกเสร็จก่อน กรณีนี้เราจะทำยังไงดีเพื่่อป้องกันการเกิด error ขึ้น ตอนที่ยังไม่ compleat ไม่อยากให้ มันบันทึกได้ สมมุติมี 4-5 table ที่เราต้องบันทึก ปรากฏว่า Table 1 เรียบร้อยแล้ว แต่ table 3 error บันทึกไม่ได้ ก็อยากให้มัน Roll back กลับไป เหมือนยังไม่ได้ทำอะไรเลย ใครพอมีวิธีแนะนำบ้างครับ รบกวนหน่อยครับ ผม ใช้ ms sql server ครับ

puklit โพสต์ 2018-7-10 13:53:43

จากปัญหาดังกล่าวผมไม่ในใจว่าโครงสร้างในการ Insert & Update เป็นแบบนี้หรือไม่เพราะถ้าใช้อาจจะพบปํญหาดังกล่าวจากผังด้างล่างนี้จะเป็นคำสั่ง Insert หรือ Update ครั้งเดียวทั้ง 3 ตาราง โดยจะทำการ Insert / Update ตารางที่ 1 - 3 ตามลำดับ
หากเกิดเหตุการที่คุณระบุไว้ช่วงที่โปรแกรมได้บันทึกในตารางที่ 1 สำเร็จแล้วมีการเรียกใช้รายงานส่งผลทำให้ Table 2 - 3 ไม่ถูกบันทึก



ผมเสนอใช้ Trigger ใน MS SQL SERVER เข้ามาช่วยจะได้โครงสร้างของการใช้คำสั่งบันทึกข้อมูลตารางดังนี้

1. กรณีที่ต้องการบันทึกข้อมูลทั้ง 3 ตารางในชุดข้อมูลเดียวกัน โครงสร้างโปรแกรมและฐานข้อมูลจะเป็นดังนี้
ใช้ VB6 ส่งคำสั่ง Insert / Update ไปยังตารางหลักก่อน จากนั้นเขียน Trigger ในตารางหลักเพื่อดักจับเหตุการณ์หลังจาก (Insert / Update)
หลังจากบันทึกข้อมูลในตารางเสร็จเรียบร้อยแล้ว Trigger ที่เขียนไว้จะทำงานส่งข้อมูลไปยังตาราง 1 - 3 เอง หากส่งข้อมูลเข้าตารางหลักไม่สำเร็จ
Trigger ก็จะไม่ทำงานอยู่แล้ว (ก็จะเหมือนที่คุณบอกว่า มัน Roll back กลับไป เหมือนยังไม่ได้ทำอะไรเลย)



2. กรณีที่ต้องการบันทึกข้อมูลทั้ง 3 ตารางโดยรับข้อมูล Insert / Update จาก VB6 มาไว้ที่ตารางหลักก่อน
แล้วหลังจากนั้น ให้ Trigger ทำงานโดยเลือกเฉพาะฟิล์ดที่ต้องการส่งค่าให้กับตาราง 1 - 3 ต่างกันไป



สำหรับวิธีการเขียนหรือใช้งาน Trigger คุณสามารถหาข้อมูลได้ตามลิ้งค์ที่ผมแนบมาครับ
CREATE TRIGGER (Transact-SQL)






fmmanchan โพสต์ 2018-7-10 16:04:59

ครับขอบคุณมากครับ เดี๋ยวจะขอลองนำไปทดลองดูก่อนครับ
หน้า: [1]
ดูในรูปแบบกติ: เวลาบันทึกข้อมูลลงฐานข้อมูล เราบันทึกโดยใช้ Transaction ของ VB6 ได้หรือไม่