注册 登录
编程论坛 ASP技术论坛

提交后怎样提取ID

hwqde 发布于 2009-09-12 22:52, 1240 次点击
<%
    title=request.form("title")
    content=request.form("content")
    dateandtime=date()

if title="" then
    FoundErr=True
    ErrMsg=ErrMsg & "<br><li>新闻标题不能为空!</li>"
end if

if content="" then
    FoundErr=True
    ErrMsg=ErrMsg & "<br><li>新闻内容不能为空!</li>"
end if


if FoundErr<>True then   
    set rs=server.CreateObject("ADODB.RecordSet")
    sql = "SELECT * FROM news"
    rs.Open sql,Conn,2,3
    rs.addnew
        rs("title") = title
    rs("content") = content
        rs("dateandtime")=dateandtime
    rs.update
    rs.close
    set rs = nothing
    Response.Redirect "Id是数据库自动编号的,怎样才能在提交后就知道此段数据的ID号呢?望高手赐教"
else
    call WriteErrMsg()
end if   
14 回复
#2
无诲今生2009-09-12 23:13
因为ID是自动编号的,所以在你插入一个纪录之前,先获取该表中ID最大的。这样现实:通过DESC使按降序排,然后取第一个ID。
然后使ID加1就是此段数据的ID了.
#3
aspic2009-09-13 08:36
if FoundErr<>True then     
    set rs=server.CreateObject("ADODB.RecordSet")
    sql = "SELECT * FROM news"
    rs.Open sql,Conn,2,3
    rs.addnew
        rs("title") = title
    rs("content") = content
        rs("dateandtime")=dateandtime
    rs.update
    ID = rs("id") '在这里提取呢?
    rs.close
    set rs = nothing
    Response.Redirect "Id是数据库自动编号的,怎样才能在提交后就知道此段数据的ID号呢?望高手赐教"
else
    call WriteErrMsg()
end if   
#4
hwqde2009-09-13 09:31
回复 2楼 无诲今生
这个想法我也想过,但如果是多人同时操作,这个ID可能就是别人的ID了
#5
hwqde2009-09-13 09:32
回复 3楼 aspic
怎样能将这个ID反馈出来呢,就是提交后用一个页面把ID号输出来?
#6
aspic2009-09-13 09:37
access只能这样获取
#7
hwqde2009-09-13 09:39
怎样能将这个ID反馈出来呢,就是提交后用一个页面把ID号输出来?
#8
aspic2009-09-13 09:49
Response.Redirect "a.asp?ID="&ID

a.asp页面
<%
ID = Request("ID")
Response.Write ID
%>
#9
aspic2009-09-13 09:51
在Access中,下面的代码一定要避免使用的:
<%  
    fakeValue = 5  
    set conn = Server.CreateObject("ADODB.Connection")  
    conn.open "<conn string>"  
    conn.execute "Insert into someTable(intField) values(" & fakeValue & ")"  
    set rs = conn.execute("select MAX(ID) from someTable")  
    response.write "新产生的 " & rs(0)  
    rs.close: set rs = nothing  
    conn.close: set conn = nothing  
%>
 
为什么必须避免呢?因为:当两个人同时调用这个ASP时候,由于可能同时插入数据记录,返回的MAX(ID)可能就是错误的。这在SQL Server中也一样。
这时,如果你坚持使用Access,你可以使用一个带有adOpenKeyset游标的Recordset对象。(在这里,Recordset对象比T-SQL语句更适当)。
 
<%  
    fakeValue = 5  
    set conn = Server.CreateObject("ADODB.Connection")  
    conn.open "<conn string>"  
    set rs = Server.CreateObject("ADODB.Recordset")  
    rs.open "select * from someTable where 1=0", conn, 1, 3  
    rs.close: set rs = nothing  
    conn.close: set conn = nothing  
    rs.AddNew  
    rs("intField") = fakeValue  
    rs.update  
    response.write "新的ID号:" & rs("id")  
    rs.close: set rs = nothing  
    conn.close: set conn = nothing  
%>
#10
aspic2009-09-13 09:52
还有人建议添加空记录 然后更新
#11
无诲今生2009-09-13 09:57
可以用application.lock和application.Unlock来锁定用户的同时操作
#12
hwqde2009-09-13 10:17
可以了,非常谢谢aspic和无诲今生的帮助.
#13
cnmtong2009-09-13 17:06
我一直是在update后直接读取rs("id")
#14
asbsxx2009-09-13 23:11
可以在access表中新增加一个字段吗?如果可以就用日期+随机数,数据提交后可利用该字段查询出ID啊
#15
aspic2009-09-14 08:30
回复 14楼 asbsxx
如果都知道那个字段了还用查id干嘛~ 既然是那样 都直接可以当主键来用了
1