ต้องการนำค่า Auto number ล่าสุด มาใช้งานใน Transaction



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

03 ส.ค. 63 , 15:46:52
อ่าน 178 ครั้ง

thanapol.w


ต้องการให้ โค๊ด 2 และ 3  นำค่า ID ที่ได้จาก โค๊ดชุดที่ 1  ซึ่งเป็น Auto number มาใส่ ตรงที่ ขีดเส้นใต้ ครับ
ถ้าใช้ Transaction มันจะได้ ID ก่อนเพิ่มใหม่  แต่ลองไม่ใช้ Transaction มันได้ ID ที่เพิ่มล่าสุด ตามที่ต้องการ

 

04 ส.ค. 63 , 23:24:41
ตอบกลับ #1

สันติสุข

: ต้องการนำค่า Auto number ล่าสุด มาใช้งานใน Transaction
« ตอบกลับ #1 เมื่อ: 04 ส.ค. 63 , 23:24:41 »
เพิ่ม
Dim LastID As Long

1. (เหมือนเดิม)

เพิ่มบรรทัดคำสั่งข้างล่างนี้
LastID = CurrentDb.OpenRecordset("SELECT @@IDENTITY as ID")("ID")

2. และ 3. เปลี่ยน DMax("id","tbl_1") เป็น CStr(LastID)
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 

05 ส.ค. 63 , 09:36:50
ตอบกลับ #2

thanapol.w

: ต้องการนำค่า Auto number ล่าสุด มาใช้งานใน Transaction
« ตอบกลับ #2 เมื่อ: 05 ส.ค. 63 , 09:36:50 »
ขอบคุณครับ
ขอสอบถามเพิ่มเติม SELECT @@IDENTITY as ID มันจะเอา Autonumber ที่ถูกสร้างล่าสุดในฐานข้อมูลใช้ไหมครับ

ถ้าหลังจากโค๊ดชุดที่ 3 มีการเพิ่ม Auto number ใหม่ในตาราง tbl_1 หรือตารางอื่น ๆ ในไฟล์อีก  ถ้าใช้ Lastid จะยังได้ค่าเท่ากับ AutoNumber ที่ถูกสร้างใน โค๊ดชุด 1 เหมือนเดิมไหมครับ

อีก 1 ข้อสอบถาม  เมื่อเกิด การ Rollback  Auto number มันข้ามเลขไปครับ ใช้วิธีการใดเพื่อให้ Rollback และไม่ข้ามเลขครับ

 

05 ส.ค. 63 , 13:02:09
ตอบกลับ #3

สันติสุข

: ต้องการนำค่า Auto number ล่าสุด มาใช้งานใน Transaction
« ตอบกลับ #3 เมื่อ: 05 ส.ค. 63 , 13:02:09 »
ขอบคุณครับ
ขอสอบถามเพิ่มเติม SELECT @@IDENTITY as ID มันจะเอา Autonumber ที่ถูกสร้างล่าสุดในฐานข้อมูลใช้ไหมครับ
ใช่ครับ

ถ้าหลังจากโค๊ดชุดที่ 3 มีการเพิ่ม Auto number ใหม่ในตาราง tbl_1 หรือตารางอื่น ๆ ในไฟล์อีก  ถ้าใช้ Lastid จะยังได้ค่าเท่ากับ AutoNumber ที่ถูกสร้างใน โค๊ดชุด 1 เหมือนเดิมไหมครับ
เหมือนเดิมครับ เพราะถูกเก็บในตัวแปร LastID ไปแล้ว แต่ถ้าสั่ง LastID = CurrentDb.OpenRecordset("SELECT @@IDENTITY as ID")("ID") อีกที ก็จะได้ค่า Autonumber ที่ถูกใช้สุดท้ายใหม่อีกที

อีก 1 ข้อสอบถาม  เมื่อเกิด การ Rollback  Auto number มันข้ามเลขไปครับ ใช้วิธีการใดเพื่อให้ Rollback และไม่ข้ามเลขครับ
ถ้ามี ID 1,2,3 บันทึกไว้แล้ว และต่อมามีการ Rollback หลายครั้งจนทำให้ ID ต่อไปจะเป็นเลข 11  สิ่งที่ทำได้ก็คือ ต้องหาว่า ID สุดท้ายคือเลขอะไรด้วย DMax() แล้วพอจะเพิ่มเรคอร์ดใหม่ ก็ใช้ SQL ที่กำหนดค่าฟิลด์ ID โดยตรงไปเลย เช่น  INSERT INTO (ID, ....) VALUES(เลขสุดท้ายจาก DMax() บวกด้วย 1, ...)  ดังนั้นจะเห็นว่า ถ้าต้องการคุณสมบัติไม่ให้มีเลขข้าม ก็ไม่ควรใช้ฟิลด์ Autonumber ครับ ให้เปลี่ยนเป็นประเภท Number-Long Integer แล้วใช้ DMax() + 1 นี่แหล่ะ เป็นตัวกำหนดค่าตัวต่อไปแทน
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 


บอร์ดเรียนรู้ Access สำหรับคนไทย