insert语句有没有返回当前保存的纪录的id的功能?

wagsoft 2001-07-19 01:02:15
执行insert语句后,用什么方法返回当前被保存的的纪录的id?
我有一段程序,需要先保存部分数据,然后将此数据的id(access里的自动编号)返回,用于另外一个表记录的保存。
别告诉我insert后再查询啊,记录有可能有重的。
别告诉我用rec.movelast啊,因为多用户状态下,不一定最后的就是你存的。
别告诉我...:-)

告诉我吧,高手。
...全文
199 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wagsoft 2001-07-19
  • 打赏
  • 举报
回复
就是这么个流程:

SQLstr = "insert into 表1 (A,B) values ('" & vA & "','" & vB & "')"
Connection.Execute SQLstr, howmany, &H1
If howmany < 1 Then
MsgBox "数据库问题,保存记录失败!"
SaveOK = False
Exit Sub
Else
SaveOK = True
End If

'在此得到上面保存的记录的ID:NowID

SQLstr = "insert into 表2 (ID表1,C) values (" & NowID & ",'" & vC & "')"
Connection.Execute SQLstr, howmany, &H1
If howmany < 1 Then
MsgBox "数据库问题,保存子记录失败!"
SaveOK = False
Exit Sub
Else
SaveOK = True
End If

cqq_chen 2001-07-19
  • 打赏
  • 举报
回复
如果就觉的不放心就用第二种方法,一般来说现在很多软件都就这么做的。
wagsoft 2001-07-19
  • 打赏
  • 举报
回复
综合大家的建议,我认为
cqq_chen(我是谁)的办法应该可以,不过感觉上总觉着拿一个算出来的ID进行操作有些不太放心,是否可以先insert,然后再马上rec.movelast,然后得到此记录的ID,这个ID是从记录中取出来的,比算出来应该放心多了吧,hoho~~。
希望继续得到高手的指点。
3Q.
little_hero 2001-07-19
  • 打赏
  • 举报
回复
voyager(远航者)的方法只适用于sqlserver,access不行!!
这问题一般的解决办法都给你限死了!绕个圈子也许可以!!期待高手回答!!!
也许这样可以解决你的问题:
保存数据一部分,照写不误,同时把另一部分找个暂存点存放起来,届时再拿出写到另一个表中,这样不就可以啦!


cqq_chen 2001-07-19
  • 打赏
  • 举报
回复
if sc.recordcount=0 then
IDvar=1
else
sc.movelast
IDvar=sc.Fields(0)+1 '我写错了,应该是加1。
end if
一般情况下对数据库的操作在多用户时这种方法也不会有问题的,不信你可以试试。
还有一种办法就是除了用ID以外,另设一个主键如果编号等,在保存后要修改记录时以编号做为条件更好一些。
wagsoft 2001-07-19
  • 打赏
  • 举报
回复
to cqq_chen(我是谁) 
应该是:
if sc.recordcount=0 then
IDvar=1
else
sc.movelast
IDvar=sc.Fields(0)
end if

我的意思你还不清楚,我要得到的ID是当前记录保存后此记录的ID,而不是未保存前数据库中最后记录的ID。
另外,用rec.movelast得到的ID并不一定是最后一个ID,因为应该考虑到多用户操作的情况。


cqq_chen 2001-07-19
  • 打赏
  • 举报
回复
在你保存这条记录之前先找到它的ID不行吗?
'DAO
dim db as database
dim sc as recordset
dim IDvar as long

set db=openatabase()
set sc=db.openrecordset()
if sc,recordcount<>0 then
IDvar=1
else
sc.movelast
IDvar=sc.Fields(0)
end if
db.execute "insert...."
这样不行吗?




wagsoft 2001-07-19
  • 打赏
  • 举报
回复
to cqq_chen(我是谁) 
在保存之前,哪里有id?这里的id是access表里的自动编号字段,是系统在保存记录时自己生成的。
在物理定位记录上,使用自动编号的id应该是最准确的办法了。
cqq_chen 2001-07-19
  • 打赏
  • 举报
回复
在保存前先记录下所要保存的ID不行吗?
wagsoft 2001-07-19
  • 打赏
  • 举报
回复
我用的是access,ado对象,你说的@符号在这里不能用吧
voyager 2001-07-19
  • 打赏
  • 举报
回复
你在什么情况下用?
Insert to tb1 ....
SELECT @ID=@@IDENTITY

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧