使用自动增类型作为ID的时候,插入记录后,如何知道插入的是哪一条(也就是得到ID)

时间:2021-05-04 00:25:56
我原来使用Oracle的时候,SEQ很方便,可以自动得到唯一数字。使用access的时候,自动增类型可以保证唯一,但是,我却得不到我刚刚添加的记录的ID,请问怎么解决。如果不要自动增字段,如何保证ID唯一?

15 个解决方案

#1


这个问题我也遇到,可不可以用select语句确定这条纪录~?

#2


新添加的记录的id是最大的,可以用select max(id) as maxid from table来获得

#3


用max()取了再程序监控max()不行吗,不过需要外部程序……

#4


不一定,这是一个并发程序,可能我访问的期间,别的线程也添加了记录,所以不一定最大。最好是先得到,或者添加的时候有返回值。

#5


那就在添加记录前,先用max(id)获得当前最大的id,然后添加记录,那么你添加的记录的id就是原最大ID值+1

#6


有道理。

#7


to:tommychim(大脚鸟)

   错了你这样做也没有用,并发也不可以解决。
max(id)大家都用的时候,ID可能得到的是一样的。
你可以写个小程序测试一下。

#8


to:lynxliu
是否单号问题?看这一贴:
http://www.csdn.net/expert/topic/426/426165.shtm

#9


@@Identity

#10


t我希望可以在程序里面解决
关键是ADO可不可以锁定数据表。“数据库”说的对,并发问题一定要保证操作的原子性。也就是我需要先锁定数据表,再操作,然后查询得到最大值,再释放锁。
我不知道在ADO里面怎么做,我是用delphi访问。我觉得单号问题把问题搞得复杂了,利用自动增的机制,可以保证不重复,关键还是锁定表。
谁能给出代码?
相比之下,我更喜欢Oracle的Seq,方便。

#11


采用readcommited事务模式

#12


添完了再查询也可以考虑

#13


Access中可以使用DAO的Recordset的AddNew, LastModified和Bookmark属性。

Function GetMaxNo() As Long
  'Open db, rs objects...
  'add one new record
  rs.AddNew
  'Set the new values for fields
  rs.Update
  Set rs.bookmark = rs.LastUpdated
  GetMaxNo = rs.Fields("AutoNum").Value
  'Close the rs and db objects
End Function

#14


一,在一个事务里用select max(id) from yourtable
二,新增后set yourID=@@Identity 

#15


如果不用自动增加,因为在sql server中没有before insert 型的触发器,所以是办不到的

#1


这个问题我也遇到,可不可以用select语句确定这条纪录~?

#2


新添加的记录的id是最大的,可以用select max(id) as maxid from table来获得

#3


用max()取了再程序监控max()不行吗,不过需要外部程序……

#4


不一定,这是一个并发程序,可能我访问的期间,别的线程也添加了记录,所以不一定最大。最好是先得到,或者添加的时候有返回值。

#5


那就在添加记录前,先用max(id)获得当前最大的id,然后添加记录,那么你添加的记录的id就是原最大ID值+1

#6


有道理。

#7


to:tommychim(大脚鸟)

   错了你这样做也没有用,并发也不可以解决。
max(id)大家都用的时候,ID可能得到的是一样的。
你可以写个小程序测试一下。

#8


to:lynxliu
是否单号问题?看这一贴:
http://www.csdn.net/expert/topic/426/426165.shtm

#9


@@Identity

#10


t我希望可以在程序里面解决
关键是ADO可不可以锁定数据表。“数据库”说的对,并发问题一定要保证操作的原子性。也就是我需要先锁定数据表,再操作,然后查询得到最大值,再释放锁。
我不知道在ADO里面怎么做,我是用delphi访问。我觉得单号问题把问题搞得复杂了,利用自动增的机制,可以保证不重复,关键还是锁定表。
谁能给出代码?
相比之下,我更喜欢Oracle的Seq,方便。

#11


采用readcommited事务模式

#12


添完了再查询也可以考虑

#13


Access中可以使用DAO的Recordset的AddNew, LastModified和Bookmark属性。

Function GetMaxNo() As Long
  'Open db, rs objects...
  'add one new record
  rs.AddNew
  'Set the new values for fields
  rs.Update
  Set rs.bookmark = rs.LastUpdated
  GetMaxNo = rs.Fields("AutoNum").Value
  'Close the rs and db objects
End Function

#14


一,在一个事务里用select max(id) from yourtable
二,新增后set yourID=@@Identity 

#15


如果不用自动增加,因为在sql server中没有before insert 型的触发器,所以是办不到的