แนะนำว่าให้ใช้ feature ของ database ดีกว่าครับ จะของ MS SQL2005 ,2008 หรือ MySQL ก็ได้เลือก column ที่เป็น ID พวกนั้นแล้วตั้งให้เป็น auto number ไว้ครับ ให้กรอกแต่ข้อมูลมาพอ save แล้วถึงจะได้ ID ครับ แล้วค่อยแสดงผลแจ้ง ID ให้ผู้ใช้ทราบอีกที
ที่แนะนำอย่างนี้ เพื่อป้องกันปัญหาตามนี้ครับ
- ถ้าแจ้งเลขรหัสไว้ก่อน เช่นผมจะสมัครและ ผมกดไปแล้วโปรแกรมสร้างเลขให้ผมสมมุติ 102 แล้วพอดีผมทำอย่างอื่นอยู่ด้วยเลยกรอกข้อมูลยังไม่ทันเสร็จแล้ว save ในช่วงที่ผมกำลังทำอยู่นั้น มีอีกคนเค้าต้องการสมัครเหมือนกัน แล้วโปรแกรมก็สร้างเลข 102 ไปให้คนนั้นอีกแล้วเ้ค้า ทำเสร็จก่อนผม แล้ว save เรียบร้อย เค้าได้เบอร์ 102 ไป ทีนี้ผมทำเสร็จบ้าง จะเกิดอะไรขึ้น?? โปรแกรมจะ error ที่ฐานข้อมูลว่ามีข้อมูลซ้ำที่ Key index หรือเปล่า??
Open()
Sql = "SELECT max(id)+1 as id FROM ชื่อตารางที่จะดึง "
Dim Cmd As New SqlCommand(Sql, Cls.Con)
Dim Rs As SqlDataReader = Cmd.ExecuteReader
If Rs.Read Then
textbox1.text= Rs("id")
Endif
อาจไม่เกี่ยวกับเรื่องที่ จขกท ถามนะครับ ในกรณีที่ ID นั้นๆ มีความสำคัญ เช่นจำเป็นต้องใช้ในการสืบค้นข้อมูล หรือเป็น ID ที่มีความหมายเช่น ใน ID สามารถบอกคุณลักษณะได้ แนะนำให้ใช้การกำหนด ID แบบ Custom (กำหนดเอง) ดีกว่าในกรณี Auto เหมาะสำหรับกรณีที่เราไม่รู้จะเอาอะไรเป็น P-Key หรือ ID นั้นๆ ไม่สำคัญจริงๆ