------------------------------------------------
我的问题是:
在一个
网络数据库中插入一个空记录,记录中有一个字段是自动递增的ID。然后再对该记录进行编辑。因此,在完成插入后,能返回刚插入记录或是ID。
我想用存储过程来完成以上过程。
我现已在使用手动递增流水号的笨办法进行操作了,另建了一个流水号记录文件,用于存储当前流水号最大值。但我觉得存在一个
问题:
当用户1申请新建记录时,我读取了流水号,然后对流水号加一得出新的流水号,再写回原文件。但在我读出数据后、写回之前,用户2申请新建记录,又读取了原来的流水号。这样一来,这两个用户的流水号是重复的了。
CJZ的方法也同样存在上述问题。
我原想用加锁的方法解决,但我在SQL7.0中没找到锁。我现在只有在asp
程序中使用application.lock。咋办???
10楼:a
11楼:Eks!!!!!
使用:RS.open "select * from tablename where fieldname = null",objConn,3,3
RS.addNew
RS(field1) = ""
RS(field2) = ""
RS(field3) = ""
RS.update
id = RS("id")
这样你就可以得到当前记录的所有字段值了(包括自动递增的id)
------------------------------------------------
本编文章将要介绍重点解释如何在Ms Sql Server中更新或添加一条记录后立即得到其标识列的值,这个值在ACCESS就是我们熟知的自动编号的
ID值,好了,闲话不多说,代码我也不多写,只写关键些,相信各位高手一看就明白,呵呵。后面也附带了在ACCESS中获取的方法,虽然在ACCESS
中获取自动编号的文章网上虽然很多,但放在此做为一个总结吧。
Set testRs=Server.CreateObject("ADODB.RecordSet") '创建要测试的对象
testRs.Open "[TestTable] ",Conn,1,2 '假定开始已经创建Conn,并且已经连接
testRs.AddNew
testRs(”ColName1”)=”ColName1”
testRs(”ColName2”)=”ColName2”
......
testRs(”ColNameN”)=”ColNameN”
testRs.Update '调用Update方法立即将内存中数据写入中,下面这句是关键的
testRs.MoveLast '将记录移动最后一条
ID=testRs(”ID”) '这样就可以立即得到刚才这个新记录的自动编号了
最后不要忘记关闭对象
testRs.Close:Set testRs= Nothing
呵呵,以上方法我已经在 2000 Server Sp4 + Ms SQL Server +
Asp/
VB/DELPHI等都测试过,都是可行的。因为本篇文章是针对有些基础的人阅读的,故上面的代码不可直接运行,如各位对上面的代码有何疑问,请与我联系QQ:115269,或者上我的网站来娱乐娱乐:772/
下面转贴出如何如何在Access中插入记录后马上得到自动编号的ID值
首先须保证获得记录集的方式支持bookmark属性,如1,3
插入一条带自动编号字段的记录后,获取该记录的bookmark属性值
temp = rs.
bookmark
然后
rs.bookmark = temp
试试!!
Response.write rs("ID").
顺便解释下BookMark是一个什么属性,因为现在网上有文章对此的解释有点歧义:)
返回唯一标识 Recordset 对象中当前记录的书签(我们在ACCESS添加一个新记录后就可通过这个属性返回他的自动编号了),或者将 Recordset 对象的当前记录设置为由有效书签所标识的记录。
设置和返回值
设置或返回计算有效书签的变体型表达式。
说明
使用 Bookmark 属性可保存当前记录的位置并随时返回到该记录。书签只能在支持书签功能的 Recordset 对象中使用。
打开 Recordset 对象时,其每个记录都有唯一的书签。要保存当前记录的书签,请将 Bookmark 属性的值赋给一个变量。移动到其他记录后要快速返回到该记录,请将该 Recordset 对象的 Bookmark 属性设置为该变量的值。
用户可能无法查看书签的值,也同样无法对书签直接进行比较(指向同一记录的两个书签的值可能不同)。
如果使用 Clone 方法创建 Recordset 的一个副本,则