ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 3309|ตอบกลับ: 2

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

[คัดลอกลิงก์]

3

กระทู้

6

โพสต์

387

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
387

แก้ไขครั้งสุดท้ายโดย 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 ครับ

11

กระทู้

31

โพสต์

427

เครดิต

ผู้ดูแลบอร์ด

Rank: 7Rank: 7Rank: 7

เครดิต
427
โพสต์ 2018-7-10 13:53:43 | ดูโพสต์ทั้งหมด

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

Concept1.PNG

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

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

Concept2.PNG

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

Concept3.PNG

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






3

กระทู้

6

โพสต์

387

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
387
 เจ้าของ| โพสต์ 2018-7-10 16:04:59 | ดูโพสต์ทั้งหมด

ครับขอบคุณมากครับ เดี๋ยวจะขอลองนำไปทดลองดูก่อนครับ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-3-28 23:06 , Processed in 0.361169 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้