杭州税务局地址:(悬赏100分)VB6.0 数据库操作问题,谁知道在存入一条记录的同时获得其ID号?

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 22:29:27
问题解决后再送分!
要求在今天(22号)下午就能解决!急!!!!!!!!!!!!我说的是同时,如果是一楼所说的那样就不能叫同时获得了。

不知道LZ使用什么数据库,如果使用Access数据库可以采用下面办法:

首先须保证获得记录集的方式支持bookmark属性,如1,3
插入一条带自动编号字段的记录后,获取该记录的bookmark属性值
temp = rs.bookmark
然后
rs.bookmark = temp
Response.write rs.Fields("ID").

如果是SQL Server数据库,那就更简单了,如果ID是自动增长的话可以通过select ##identity 语句直接获得.

如果是MySQL,直接使用LAST_INSERT_ID()函数,具体写SQL按下面格式即可:
select last_insert_id() as ID from XXXX limit 1

-----------------------------------------
注意上面所有的办法,前提是要求你的ID是真的主键,我见过很多XD写个ID纯粹是为了格式通过.还有就是,如果你的程序会有大量的并发连接,上面所有的方式都有可能失效,也就是你插入数据后,别人也插入一个数据,然后你取最后的ID,这个是必然的,主要是没有办法避免同步的问题.

sql="insert into atable(a,b) values('c','d')"
SQL = "select @@identity as ID"
Rs.Open SQL, CNN, adOpenStatic, adLockReadOnly, 1
temp_id = Rs!ID
Rs.Close
temp_id就是刚刚新插入记录的id

是自动获取ID吗?如果是这样的话,先把数据库里的最后一个ID读取出来加1不就行了?

Dim conn As New ADODB.Connection
Dim connstr As String
Dim sdbname As String
sdbname = App.Path + "\db\#db.mdb"
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Persist Security Info=False;" & "Data Source=" & sdbname & ";" & "Jet OLEDB:"
conn.Open connstr

Dim sql As String
sql = "Select * from title order by id desc"
Dim rs As New ADODB.Recordset
rs.Open sql, conn, 1, 1
dim id as integer
id=rs("id")+1

Dim sql2 As String
sql2 = "Select * from title order by id desc"
Dim rs2 As New ADODB.Recordset
rs2.Open sql2, conn, 1, 1
rs2.addnew
rs2("XX")=XX
rs2.update
conn.close