如何获得刚刚添加进数据库的纪录的自动增长字段?

demoer 2003-03-28 10:22:13
有一个表的主键是identity的,我新增加一条,然后马上就需要用到它来填充另外一个表,这个表是多用户同时使用的,如果用@@identity的话,如果不加上锁定,不能保证在并发的正确性,如果加了锁定的话,是不是对别的用户添加有影响(比如添加的时候出错),而且如果我解锁之后马上有人添加新的纪录,那我之后查询到的id不就错了么?
100分,在线等,一定送分结贴
...全文
10 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
icnetcn 2003-03-28
.LockType = adLockBatchOptimistic
.AddNew
..
..
.UpdateBatch
debug.print .Fields!ID
回复
zsgzsgzsg 2003-03-28
不用专门加上锁定,如楼上示例中rs1.Update后,rs1.Fields(PK).Value就是新加记录的id,
这与rs1.Update后其它用户的操作无关。
但应注意应用客户端游标:
Conn.CursorLocation = adUseClient
回复
icnetcn 2003-03-28
用批处理锁在更新后就可以得到.
回复
zhp80 2003-03-28
如果你是在用ADODB

Dim Conn As New adodb.Connection
Dim rs1 As New adodb.Recordset
Dim rs2 As New adodb.Recordset

Conn.ConnectionString = "..."
Conn.Open

Conn.BeginTrans
On Error GoTo Errx
rs1.Open SQLstr, Conn, adOpenDynamic, adLockOptimistic
rs2.Open SQLstr, Conn, adOpenDynamic, adLockOptimistic
rs1.AddNew
rs1.Fields(?)=???
rs1.Fields(?)=???
...
rs1.Update

rs2.AddNew
rs2.Fields(FK).Value = rs1.Fields(PK).Value
rs2.Fields(?)=???
rs2.Fields(?)=???
...
rs2.Update
Conn.CommitTrans

Errx:
Conn.RollbackTrans
mesgbox .....


如果你使用存储过程,待续
回复
qqqdong 2003-03-28
在一个事务中读取
回复
相关推荐
发帖

1187

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2003-03-28 10:22
社区公告
暂无公告