ทำได้หลายวิธีครับ
ถ้าใช้ MySql ,Access,SQLServer สามารถทำ Auto ได้เลยครับ
MySQL : ในช่อง Extra กำหนดเป็น Auto Increment ครับ
Access : ในช่อง Type กำหนดเป็น Auto Number ครับ
SQLServer : ในช่อง Properties : I dentity => Is I dentity กำหนดเป็น Yes ครับ
หรือจะทำแบบกระทู้ข้างบนก็ได้นะครับเป็นอีกวิธีหนึ่ง
Qracle จะทำแบบ ทิกเกอร์ หรือ Code ก็ได้ครับ
หลักการคือ ดึงข้อมูล ID (จำนวนเต็ม) ที่มากที่สุดมาบวกเข้าที่ละหนึ่ง
แต่ถ้า ID (เป็น String) ก็ทำแบบกระทู้ข้างบนก็ได้นะครับ หรือ จะสร้างตารางใหม่ที่เก็บเฉพาะ ID(จำนวนเต็ม) ของแต่ละตาราง เมื่อจะใช้ก็ดึงเข้ามาบวกที่ละหนึ่งจากนั้นค่อยยิงลง Database ครับ (แต่วิธี Code มีข้อเสียคืออาจจะมีการเพิ่มข้อมูลของ User ในเวลาเดียวกันจากหลาย ๆ ที่อาจจะทำให้ใช้ ID เดียวกันจึงทำให้ไม่สามารถบันทึกข้อมูลลงDatabase ได้นะครับ ดังนั้นจะต้องดึงมาเป็นขั้นตอนสุดที่เมื่อต้องการบันทึกนะครับจะช่วยแก่ได้)
ลองประยุคใช้ดูนะครับ
Imports System.Data.SqlClient
Imports System.Data
Partial Class Admin_frmAddCustomerCM
Inherits System.Web.UI.Page
Dim connectdb As New ConnectDB
Dim objConn As New SqlConnection
Dim dtReader As SqlDataReader
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack() Then
Call AutoCM_id()
End If
End Sub
Sub AutoCM_id()
Dim strsql As String = ""
Dim cmd As SqlCommand = connectdb.CreateCommand(strsql)
Dim CumID As Integer = 0
strsql = "SELECT TOP 1 CumCM_id FROM CustomerCM ORDER BY Member_id DESC"
Try
With cmd
.CommandType = CommandType.Text
.CommandText = strsql
.Connection = objConn
dtReader = .ExecuteReader
dtReader.Read()
CumID = CInt(dtReader.Item("CumCM_id"))
dtReader.Close()
CumID = CumID + 1
txtCusID.Text = CumID.ToString("0000")
End With
Catch ex As Exception
txtCusID.Text = "0001"
End Try
End Sub
insert into test
SELECT top 1
CONCAT( SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ', c + (idx=9999) - 64,1), SUBSTRING(idx + 10001,2) ),
'valuefield1', 'valuefield2','......'
FROM (
select ASCII('A') as c, 0 as idx union all
select ASCII(LEFT(max(id),1)), RIGHT(max(id),4)*1 FROM test
) as tmp
order by tmp.c desc, tmp.idx desc