在ACCESS中如何得到插入一条记录后最新的ID?

时间:2021-01-10 00:26:49
代码如下:
 exec="select count(*) from "+nj+"zx "
 set rs1=server.createobject("adodb.recordset")
 rs1.open exec,conn,1,1
 exec="select * from "+nj+"zx"
 set rs2=server.createobject("adodb.recordset")
 rs2.open exec,conn,1,1

 if rs1(0)>0 then
  do while not rs2.eof
   
   zx=rs2("zx")
   zxz=rs2("zx")+"z"
   zxt=rs2("zx")+"t"
   zxs=rs2("zx")+"s"
   zxz=request.form(zxz)
   zxt=request.form(zxt)
   zxs=request.form(zxs)
   
   if zxz="" or zxt="" or zxs="" then
%>
<script language="JavaScript" type="text/JavaScript">
  back_msg("对不起,请先把相应的表单填完整!");
</script>
<%
   else
     exec="insert into "+nj+"zxp(bjid,zx,z,t,s)values("+bjid+",'"+zx+"',"+zxz+","+zxt+","+zxs+")"
     conn.execute exec
   end if
  rs2.movenext
  loop
 end if
 

rs1.close
rs2.close

set rs1=nothing
set rs2=nothing

偶的本意是在表单提交后,先查看所有的表单中是否有空值,如果有表单则不执行,如果没有则执行插入操作。
但现在的问题是,在表单中如果有某一行的值都不为空它就会执行一个插入操作,但是如果下一行为空它又会跳回来,但偶不希望这个插入操作在表单中还有空值的时候就被执行。。。
偶想了很久,觉得最好的解决方法是在执行插入语句exec="insert into "+nj+"zxp(bjid,zx,z,t,s)values("+bjid+",'"+zx+"',"+zxz+","+zxt+","+zxs+")"的时候把它的ID号获取到,并存入到一个数组中,并在前面写入一个循环,当条件不满足的时候将原来的插入记录都删除掉,但偶实在不知道该怎么去实现这个操作,在这里向各位大虾求教了,并想求教一下各位大虾们有没有更好的解决方法。

10 个解决方案

#1


参考:select max(id) as 'lastId' from TableName 
只是参考..................

#2


用ac自己设置个无重复主键.....可以用时间+随机数的办法

#3


用 
select top 1 id From TableName Order By Id Desc
来查询应该会快一些:)

#4


如果 ID 是自动编号的 ,

那么楼上的方法可行 ,

如果不是 , 可以这样 , 加一个字段 Guid 
插入记录时生成一个 Guid 写入该字段 , 然后 select ID from TableName where Guid='你生成的Guid'

#5


回复:
   偶的ID 是自动编号的 
   但偶一直觉得偶的方法太笨,特别是在进行大批量数据操作时,很容易出故障,不知道各位大虾们有没有更好的解决该问题的办法(纯粹探讨一下)

#6


select max(ID) from TABLE_NAME
应该这个可以的

#7


判断一下zx, zxz,zxt,zxs,zxz,zxt,zxs这个几个字符串是否为空,如果有空就不执行

#8


谢jobs002,liuxiaoyi666,coolattt,ptma,minady,旧的问题已经基本上解决了,但是新的问题又来了:
偶把上面的代码单独执行确实没问题,但偶想像这样同时操作三个表,前面的第一个表操作起来没问题,后面的两个表操作起来就不对了,但把每个表单独执行又没问题,狂郁闷中,代码都是一样的,偶调试了一中午都没结果,难道是偶的思路有问题吗???
附,改后的代码:
第一个表:
exec="select count(*) from "+nj+"zx "
 set rs1=server.createobject("adodb.recordset")
 rs1.open exec,conn,1,1
 exec="select * from "+nj+"zx"
 set rs2=server.createobject("adodb.recordset")
 rs2.open exec,conn,1,1
 if rs1(0)>0 then
  dim m, n, id(9)
  m=0
  do while not rs2.eof
   zx=rs2("zx")
   zxz=rs2("zx")+"z"
   zxt=rs2("zx")+"t"
   zxs=rs2("zx")+"s"
   zxz=request.form(zxz)
   zxt=request.form(zxt)
   zxs=request.form(zxs)
   if zxz="" or zxt="" or zxs="" then
     for n=0 to m-1 step 1
   exec="delete * from "+nj+"zxp where id="&id(n)
       conn.execute exec
 next
%>
<script language="JavaScript" type="text/JavaScript">
  back_msg("对不起,请先把相应的表单填完整!");
</script>
<%
   else
     exec="insert into "+nj+"zxp(bjid,zx,z,t,s)values("+bjid+",'"+zx+"',"+zxz+","+zxt+","+zxs+")"
     conn.execute exec
 exec="select top 1 id From "+nj+"zxp Order By id Desc"
 set rs=server.createobject("adodb.recordset")
     rs.open exec,conn,1,1
     id(m)=rs("id")
 m=m+1
   end if
  rs2.movenext
  loop
 end if
第二个表:
exec="select count(*) from "+nj+"fx "
 set rs1=server.createobject("adodb.recordset")
 rs1.open exec,conn,1,1
 exec="select * from "+nj+"fx"
 set rs2=server.createobject("adodb.recordset")
 rs2.open exec,conn,1,1
 if rs1(0)>0 then
  m=0
  do while not rs2.eof
   fx=rs2("fx")
   fxz=rs2("fx")+"z"
   fxz=request.form(fxz)
   if fxz="" then
     for n=0 to m-1 step 1
   exec="delete * from "+nj+"fxp where id="&id(n)
       conn.execute exec
 next
%>
<script language="JavaScript" type="text/JavaScript">
  back_msg("对不起,请先把相应的表单填完整!");
</script>
<%
   else
     exec="insert into "+nj+"fxp(bjid,fx,z)values("+bjid+",'"+fx+"',"+fxz+")"
     conn.execute exec
 exec="select top 1 id From "+nj+"fxp Order By id Desc"
 set rs=server.createobject("adodb.recordset")
     rs.open exec,conn,1,1
     id(m)=rs("id")
 m=m+1
   end if
  rs2.movenext
  loop
 end if
第三个表:
bzrz=request.form("bzrz")
 bzrt=request.form("bzrt")
 bzrx=request.form("bzrx")
 if bzrz="" or bzrt="" or bzrx="" then
%>
<script language="JavaScript" type="text/JavaScript">
  back_msg("对不起,请先把相应的表单填完整!");
</script>
<%
 else
   exec="insert into "+nj+"bzrp(bjid,z,t,x)values("+bjid+","+bzrz+","+bzrt+","+bzrx+")"
   conn.execute exec
 end if

#9



sql="select id,ddd,ccc from table where id=0"
rs.open sql,conn,3,3
rs.addnew
rs("ddd")="ddd"
...
rs.update
dim id
id=rs("id")
rs.clsoe

#10


在插入新的记录后

lssql="select @@IDENTITY As NewID"
set rs=conn.ececute(lssql)
NewID=rs.Fields("NewID").value

#1


参考:select max(id) as 'lastId' from TableName 
只是参考..................

#2


用ac自己设置个无重复主键.....可以用时间+随机数的办法

#3


用 
select top 1 id From TableName Order By Id Desc
来查询应该会快一些:)

#4


如果 ID 是自动编号的 ,

那么楼上的方法可行 ,

如果不是 , 可以这样 , 加一个字段 Guid 
插入记录时生成一个 Guid 写入该字段 , 然后 select ID from TableName where Guid='你生成的Guid'

#5


回复:
   偶的ID 是自动编号的 
   但偶一直觉得偶的方法太笨,特别是在进行大批量数据操作时,很容易出故障,不知道各位大虾们有没有更好的解决该问题的办法(纯粹探讨一下)

#6


select max(ID) from TABLE_NAME
应该这个可以的

#7


判断一下zx, zxz,zxt,zxs,zxz,zxt,zxs这个几个字符串是否为空,如果有空就不执行

#8


谢jobs002,liuxiaoyi666,coolattt,ptma,minady,旧的问题已经基本上解决了,但是新的问题又来了:
偶把上面的代码单独执行确实没问题,但偶想像这样同时操作三个表,前面的第一个表操作起来没问题,后面的两个表操作起来就不对了,但把每个表单独执行又没问题,狂郁闷中,代码都是一样的,偶调试了一中午都没结果,难道是偶的思路有问题吗???
附,改后的代码:
第一个表:
exec="select count(*) from "+nj+"zx "
 set rs1=server.createobject("adodb.recordset")
 rs1.open exec,conn,1,1
 exec="select * from "+nj+"zx"
 set rs2=server.createobject("adodb.recordset")
 rs2.open exec,conn,1,1
 if rs1(0)>0 then
  dim m, n, id(9)
  m=0
  do while not rs2.eof
   zx=rs2("zx")
   zxz=rs2("zx")+"z"
   zxt=rs2("zx")+"t"
   zxs=rs2("zx")+"s"
   zxz=request.form(zxz)
   zxt=request.form(zxt)
   zxs=request.form(zxs)
   if zxz="" or zxt="" or zxs="" then
     for n=0 to m-1 step 1
   exec="delete * from "+nj+"zxp where id="&id(n)
       conn.execute exec
 next
%>
<script language="JavaScript" type="text/JavaScript">
  back_msg("对不起,请先把相应的表单填完整!");
</script>
<%
   else
     exec="insert into "+nj+"zxp(bjid,zx,z,t,s)values("+bjid+",'"+zx+"',"+zxz+","+zxt+","+zxs+")"
     conn.execute exec
 exec="select top 1 id From "+nj+"zxp Order By id Desc"
 set rs=server.createobject("adodb.recordset")
     rs.open exec,conn,1,1
     id(m)=rs("id")
 m=m+1
   end if
  rs2.movenext
  loop
 end if
第二个表:
exec="select count(*) from "+nj+"fx "
 set rs1=server.createobject("adodb.recordset")
 rs1.open exec,conn,1,1
 exec="select * from "+nj+"fx"
 set rs2=server.createobject("adodb.recordset")
 rs2.open exec,conn,1,1
 if rs1(0)>0 then
  m=0
  do while not rs2.eof
   fx=rs2("fx")
   fxz=rs2("fx")+"z"
   fxz=request.form(fxz)
   if fxz="" then
     for n=0 to m-1 step 1
   exec="delete * from "+nj+"fxp where id="&id(n)
       conn.execute exec
 next
%>
<script language="JavaScript" type="text/JavaScript">
  back_msg("对不起,请先把相应的表单填完整!");
</script>
<%
   else
     exec="insert into "+nj+"fxp(bjid,fx,z)values("+bjid+",'"+fx+"',"+fxz+")"
     conn.execute exec
 exec="select top 1 id From "+nj+"fxp Order By id Desc"
 set rs=server.createobject("adodb.recordset")
     rs.open exec,conn,1,1
     id(m)=rs("id")
 m=m+1
   end if
  rs2.movenext
  loop
 end if
第三个表:
bzrz=request.form("bzrz")
 bzrt=request.form("bzrt")
 bzrx=request.form("bzrx")
 if bzrz="" or bzrt="" or bzrx="" then
%>
<script language="JavaScript" type="text/JavaScript">
  back_msg("对不起,请先把相应的表单填完整!");
</script>
<%
 else
   exec="insert into "+nj+"bzrp(bjid,z,t,x)values("+bjid+","+bzrz+","+bzrt+","+bzrx+")"
   conn.execute exec
 end if

#9



sql="select id,ddd,ccc from table where id=0"
rs.open sql,conn,3,3
rs.addnew
rs("ddd")="ddd"
...
rs.update
dim id
id=rs("id")
rs.clsoe

#10


在插入新的记录后

lssql="select @@IDENTITY As NewID"
set rs=conn.ececute(lssql)
NewID=rs.Fields("NewID").value