◀ Previous Next ▶ Up ▲


witpoko.com


VB6 รบกวนผู้รู้การป้องกันการ insert ข้อมูลพร้อมกันจาก คอมฯ5เครื่อง ที่ใช้โปรแกรมเดียวกันในวินาทีเดียวกัน

ผมเขียนโปรแกรมVB6 รับปัญหาจากลูกค้าในแผนกคอมพิวเตอร์ ซึ่งช่างคอมฯ 5คน ใช้โปรแกรมนี้ลงทะเบียนID ตาราง ปัญหา เก็บไว้อ้างอิงใน db.mdb (access97)

เช่น ตารางปัญหา
ID,Time,Problem(001,19:48:06,Virus)
ID,Time,Problem(002,19:48:06,Trojan)
ID,Time,Problem(002,19:48:06,Worm)

ผมเขียนโปรแกรมเสร็จแล้ว ซึ่งเวลาช่างคอมฯกด ปุ่มลงทะเบียน(ADD NEW ID) โปรแกรมก็จะหาไอดีล่าสุดในตาราง + 1 (rs.recordcount+1)แล้วก็จะ insert ID ล่าสุด ตามปกติ ไม่มีปัญหา แต่ถ้าเกิดว่า ช่างคอมฯในแผนก กดปุ่มลงทะเบียน พร้อมกันตั้งแต่ 2 คนขึ้นไป ในวินาทีเดียวกัน โปรแกรมผมไม่ได้ออกแบบมาให้รับ เหตุการณ์นี้ ก็จะเกิด error แล้วก็จะปิดตัวเองอัตโนมัติ แต่ไม่ได้กระทบกับฐานข้อมูลใดๆ คนที่กดลงทะเบียนคนแรกก็จะได้ insert ID ล่าสุดได้ตามปกติ ไม่มีerror แต่คนที่2 เป็นต้นไปจะเกิดerror ดังกล่าว
error ที่ว่า เกิดจาก ฐานข้อมูล ห้าม insert ID เดียวกัน(Primary Key)  หรือที่มีอยู่แล้วใน ตาราง

ผมอยากรบกวนผู้รู้วิธีแก้ปัญหา หรือรู้วิธีป้องกันนี้ ช่วยบอก code VB ชี้ทางแก้ด้วยครับ โปรแกรมนี้ ผมต้องลงในเครื่อง ลูกข่าย 5เครื่อง ใช้ DBในเครื่องแม่ข่าย ตัวเดียวกันครับ เขียนโปรแกรมยังไงไม่ให้เกิดปัญหาข้างต้น เพราะบางทีช่างคอมก็ต้องเปิดโปรแกรมรับทราบปัญหาจากพนักงานในบริษัท ตลอด มีโอกาสที่จะเกิดเหตุการณ์แบบนี้ได้ครับ ขอบพระคุณทุกท่าน ล่วงหน้าครับ

*ปัญหา:เวลา insert ID (PK) ในวินาทีเดียวกัน เกิด Error
*ต้องการ:code โปรแกรมเดียวสำหรับ เครื่องลูกข่าย5เครื่อง ที่ไม่มีปัญหา insert ลงตาราง ในเครื่อง แม่ข่าย(server) ซ้ำID (Realtime)

ขอเพิ่มข้อมูลสำหรับวิเคราะห์ครับ
ผมต้องใช้การจองไอดีครับ ไม่กลัวเปลืองเนื้อที่ฮาร์ดดิสครับ เพราะเอาไว้ใช้อ้างอิง ว่าลูกค้าไอดีอะไรที่มีปัญหา เวลาตามเช็คย้อนหลังครับ
เวลาช่างกดปุ่มADD โปรแกรมจะ Insert สองตารางครับ
โดยผมเขียนโปรแกรมหาIDล่าสุด +1 ได้ไอดีใหม่ ยกตัวอย่างเช่นได้ไอดี0000000002 แล้วอัพเดททันที โดยคิดว่า คนที่คลิ๊กคนที่สองจะเห็นไอดีใหม่ทันทีแล้วจองไอดีต่อไป คือ 0000000003 ครับ
ตารางแรกHelpdesk
Helpdesk(ID,RegisterDate,CustomerCallName)
Helpdesk(0000000002,30.08.2007,Malee)

ตารางที่2HistoryUpdate
(ดู History ว่าช่างอัพเดทแก้ปัญหาอะไรบ้าง
เช่น ไวรัส ครั้งที่ 1 สแกนไวรัส
ครั้งที่ 2 อัพเดทวินโดว์ )
HistoryUpdate(ID,copy,LastUpdateDate)
HistoryUpdate(0000000002,001,30.08.2007)

ตอนนี้ผมกำลังลอง Autonumber ตามที่คุณ jnithi (นายจวบ) แนะนำอยู่ครับ แต่ใจจริง ผมอยากใช้ คิวครับ เช่น คนแรกกำลังทำงานอยู่ ยังไม่เสร็จ คนต่อๆไปต้องรอให้ทำเสร็จ แต่ผม ไม่เคยลอง ใช้ Data Structure แบบคิว ตามคนคลิ๊ก เลยครับ ใครมีไอเดียช่วยทีนะครับ ถ้าเป็นโค๊ดเลยก็จะดีมากครับ ขอบคุณครับ

แก้ไขเมื่อ 30 ส.ค. 50 18:15:16

จากคุณ : polizist -[ 29 ส.ค. 50 - 21:15:47 ]





กระทู้ยอดนิยม