╋艺 镇╋╋网站网络|程序语言|Flash╋┣◇网站建设&Web语言 → 在添加数据时如何获得当前的ID号


  共有22533人关注过本帖树形打印复制链接

主题:在添加数据时如何获得当前的ID号

美女呀,离线,留言给我吧!
admin
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 司令 亲民勋章
等级:管理员 帖子:3027 积分:27521 威望:0 精华:7 注册:2003/12/30 16:34:32
在添加数据时如何获得当前的ID号  发帖心情 Post By:2010/9/4 21:44:55 [只看该作者]

'   Open   our   table,   it 's   important   to   use   the   Keyset   cursor   if  
'   you 're   using   ODBC   to   connect   to   your   data   source,   if   you 're  
'   using   OLEDB   then   you   can   also   use   a   Dynamic   cursor,   and  
'   an   Optimistic   or   Pessimistic   Lock,   however   a   Keyset   cursor
'   with   an   Optimistic   lock   in   the   most   resource   efficient..
objRst.Open   "BurgerChainOwners ",   objCnn,   adOpenKeyset,   _
                                      adLockOptimistic,   adCmdTable

'   Call   the   AddNew   method,   which   moves   the   current   row  
'   pointer   on   a   new   row.
objRst.AddNew

          '   Now,   set   the   values   for   the   fields   in   that   row.
          objRst( "f_name ")   =   "Ronald "
          objRst( "s_name ")   =   "McDonald "
          objRst( "company ")   =   "McDonalds   Chain   of   Restaurants "
          objRst( "fav_burger ")   =   "Cheeseburger "

'   Commit   the   changes   by   calling   Update.
objRst.Update

'   Get   the   value   of   the   record   that   we   just   inserted.
Response.Write   objRst( "id ")
----------
这个方法其实就是用RS.ADDNEW添加完毕数据后马上获取此ID,在RS没关闭前。



  
“艺镇”官方站:www.zyzsky.com QQ群:1221854  回到顶部
美女呀,离线,留言给我吧!
admin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 司令 亲民勋章
等级:管理员 帖子:3027 积分:27521 威望:0 精华:7 注册:2003/12/30 16:34:32
  发帖心情 Post By:2010/9/4 21:45:30 [只看该作者]

另一个人提供的三种方法:
这个问题在Access版快已经解决了,包括数据源是access和sqlserver。

方法有3个
如何在表中新插入新记录后,获取该记录自动编号字段的值?
请教一个问题,请各位帮忙!!!
        Access数据库中,有“自动编号”类型字段,但在表中新插入新记录后,在编程中
如果取得新插入记录的自动编号的值



我在写登陆界面的时候也遇到同样的问题
我用   insert   into   来添加一个新的人员,但是该人员的password字段值是用这条记录的自动编号字段的值+密码   这样的格式来存储的,也就是说我必须先添加,然后用   update   来设置密码,就遇到了和你相同的问题。

我的办法是:在insert   into   的同时将你自己生成的一个uid存储在新纪录的   password   里面,在   update   的时候只要找到这段值就可以了。
        以下是我的代码


        DoCmd.SetWarnings   False
        Dim   strGUID   As   String
        strGUID   =   CreateGUID       '建立一个GUID  
        '建立GUID有很多方法,你甚至可以建立一个你自己的GUID:     日期+时间+人员姓名+4位数的随机数字
        Debug.Print   strGUID
        DoCmd.RunSQL   "INSERT   INTO   tbl_family   (   name,   pwd   )   SELECT   ' "   &   text4.value   &   " '   AS   表达式1,   ' "   &   strGUID   &   " '   AS   表达式2 "
        Dim   strUID   As   String
        strUID   =   Trim(str(DLookup( "id ",   "tbl_family ",   "name= ' "   &   text4.value   &   " '   and   pwd= ' "   &   strGUID   &   " ' ")))
        DoCmd.RunSQL   "UPDATE   tbl_family   SET   tbl_family.pwd   =   md5( ' "   &   strUID   &   "| "   &   Text6.value   &   " ')   WHERE   tbl_family.id= "   &   strUID

        DoCmd.SetWarnings   True


关于如何得到新增记录的自动增加字段数值方法二 <-ec转移
很简单,先取id后update

dim   rcd   as   long
Dim   rs   As   New   ADODB.Recordset
rs.Open   "表1 ",   CurrentProject.Connection,   adOpenDynamic,   adLockOptimistic
rs.AddNew
rcd=rs( "id ")
rs.update
rs.Close

docmd.runsql   "update   …   where   id= "&str(rcd)


---------

方法三:

Private   Sub   AutoIncTest()
      Dim   cnn   As   ADODB.Connection
      'Dim   cmd   As   ADODB.Command
      Dim   rst   As   ADODB.Recordset
      Set   cnn   =   CurrentProject.Connection
      'Set   cmd   =   New   ADODB.Command
      'Set   cmd.ActiveConnection   =   cnn
      'cmd.CommandType   =   adCmdText
      'cmd.CommandText   =   "INSERT   INTO   tblNewOrder2   "   &   _
                                          "(ItemId,   Quantity)   valueS   (1,   20) "
      'cmd.Execute
      'Set   cmd   =   Nothing
      cnn.execute   "insert   into   tblneworder2   (item)   values   ( 'dd ') "
      Set   rst   =   New   ADODB.Recordset
      rst.Open   "SELECT   @@IDENTITY   AS   LastOrderId ",   _
                                  cnn,  
            Options:=adCmdText
      Debug.Print   "OrderId   for   new   record   =   "   &   _
      rst( "LastOrderId ")  
      rst.Close


  
“艺镇”官方站:www.zyzsky.com QQ群:1221854  回到顶部
美女呀,离线,留言给我吧!
admin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 司令 亲民勋章
等级:管理员 帖子:3027 积分:27521 威望:0 精华:7 注册:2003/12/30 16:34:32
  发帖心情 Post By:2010/9/4 21:45:51 [只看该作者]

这个方法未测试:

首先须保证获得记录集的方式支持bookmark属性,如1,3  

插入一条带自动编号字段的记录后,获取该记录的bookmark属性值  

temp   =   rs.bookmark  

然后  

rs.bookmark   =   temp  

试试!!  

Response.write   rs.Fields( "ID ").Value  
--------------------------------------
用以上方法可以在Access解决问题
可是在Sqlserver2000中出现以下错误
ADODB.Recordset   错误   '80040e21 '  

提供者不能确定该值。原因可能是:记录刚刚创建,该字段的默认值不可用,或用户未设置新值。


  
“艺镇”官方站:www.zyzsky.com QQ群:1221854  回到顶部
美女呀,离线,留言给我吧!
admin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 司令 亲民勋章
等级:管理员 帖子:3027 积分:27521 威望:0 精华:7 注册:2003/12/30 16:34:32
  发帖心情 Post By:2010/9/4 21:46:28 [只看该作者]

另外方法:

asp里面,向数据库里面添加一条记录之后,可以立刻获得这个记录的ID号吗?就是自动编号

取得插入 id ...

Access 的办法是取得 bookmark 属性 ...

yanzi = rs.bookmark

SQL Server 里面可以寻找 INDENTITY 的值 ...

Select @@IDENTITY AS 'yanzi'

yanzi 就是最后的 id ...

当然你也可以 Select TOP 1 id FROM table orDER BY id DESC ..

只是比较麻烦 ...


首先须保证获得记录集的方式支持bookmark属性,如1,3

插入一条带自动编号字段的记录后,获取该记录的bookmark属性值

temp = rs.bookmark

然后

rs.bookmark = temp

试试!!

Response.write rs.Fields("ID").Value



如果用2000以上版本的access,也可以用 Select @@IDENTITY 方法来获得最新ID




我的理解是..添加记录成功后..就输出ID

rs.addnew
...
rs.update
response.write 此记录ID


简单,直接,明了
application.lock()
.
.
.
添加记录
.
.
.

set rs=conn.execute("Select TOP 1 id FROM table orDER BY id DESC")
response.write rs("id")
application.unlock()


rs.addnew
...
rs.update
id=rs("id")
其实就可以通直接取得id了,在此不能关闭记录集.


  
平面设计、网站建设、三维动画、视频制作 联系QQ:114103945  回到顶部
美女呀,离线,留言给我吧!
admin
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 司令 亲民勋章
等级:管理员 帖子:3027 积分:27521 威望:0 精华:7 注册:2003/12/30 16:34:32
  发帖心情 Post By:2010/9/4 21:47:48 [只看该作者]

附上一个ADDNEW的使用方法

<meta http-equiv="Content-Type" c />
<!--#include file="inc/Conn.asp"-->
<!--#include file="Inc/eshopcode.asp"-->
<!--#include file="inc/MD5.asp"-->
<%
If Request.QueryString("action")="" Then
Response.Redirect "Index.asp"
Else
    Ip_address=Request.ServerVariables ("HTTP_X_FORWARDED_FOR")
    If Ip_address=""      Then
    Ip_address= Request.ServerVariables ("REMOTE_ADDR")
end if
UserName=Trim(Request.Form("UserName"))
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
if checkstr2(UserName)=true then
      response.Write(" <center>您输入的用户名中含有'~!@#$%^&*(),. <>{}[]等特殊字符,请检查重填! <br> <a href='"&server_v1&"'>返回上一页 </a> </center>")
      response.End()
end if
Password=Trim(Request.Form("Password"))
if checkstr2(Password)=true then
      response.Write(" <center>您输入的密码中含有'~!@#$%^&*(),. <>{}[]等特殊字符,请检查重填! <br> <a href='"&server_v1&"'>返回上一页 </a> </center>")
      response.End()
end if
Password=MD5(Password,16)
usertruepas=trim(request.form("password"))
sex=request.form("sex")
Question=checkstr(Trim(Request.Form("Question")))
Answer=md5(Trim(Request.Form("Answer")),16)
email=checkstr(Trim(Request.Form("email")))
if username="" or password="" then
response.Write(" <center>不好意思,您填写的不完整,请后退重填,有问题请联系管理员。 </center>")
response.End()
end if
Set ob=Conn.Execute("Select * From Dv_User Where UserName='"&UserName&"' ")
If Not(ob.Eof and ob.Bof) Then
    Response.write " <script language='javascript'>" & chr(13)
Response.write "alert('用户名已存在!');" & Chr(13)
Response.write "history.go(-1);"&Chr(13)
Response.write " </script>" & Chr(13)
    Response.End
Else
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "select * From Dv_User"
rs.Open sql,conn,1,3
rs.AddNew
rs("UserName")=UserName
rs("usersex")=sex
rs("UserPassWord")=Password
rs("usertruepas")=usertruepas
rs("userQuesion")=Question
rs("userAnswer")=Answer
rs("Useremail")=email
if request.QueryString("type")="pers" then
rs("usertype")="pers"
else if request.QueryString("type")="comp" then
rs("usertype")="comp"
end if
end if
    Rs("JoinDate")=now()
Rs("Lockuser")=0
Rs("Userclass")="新手上路"
Rs("UserGroupID")=9
Rs("TitlePic")="level0.gif"
Rs("UserFace")="Images/userface/image1.gif"
rs("UserIM")="||||||||||||||||||"
    Rs("UserWidth")=32
Rs("Usertoday")="0|0|0|0|0"
Rs("UserHeight")=32
Rs("UserLogins")=1
Rs("LastLogin")=now()
Rs("userWealth")=100
Rs("userEP")=60
Rs("usercP")=30
Rs("UserInfo")="||||||||||||||||||||||||||||||||||||||||||"
Rs("UserSetting")="1|||0|||0"
Rs("UserPower")=0
Rs("UserDel")=0
Rs("UserIsbest")=0
Rs("UserMoney")=0
Rs("UserTicket")=0
Rs("UserFav")="陌生人,我的好友,黑名单"
Rs("IsChallenge")=0
Rs("UserHidden")=0
Rs("UserLastIP")=ip_address
Rs.Update
rs.close
set rs=nothing
set rs2=server.createobject("adodb.recordset")
sql2="select * from dv_setup"
rs2.open sql2,conn,1,3
rs2("Forum_UserNum")=rs2("Forum_UserNum")+1
rs2("Forum_lastUser")=username
rs2.update
rs2.close
set rs2=nothing
end if
if request.QueryString("type")="pers" then
Session("PersUserName")=username
Session("PersPassWord")=password
session("usertype")="pers"
Session.Timeout = 30
response.Cookies("37job")("persusername")=username
response.Cookies("37job")("perspassword")=password
response.cookies("37job").Expires=date+1
Response.write " <script language='javascript'>" & chr(13)
Response.write "alert('注册成功!请接着填写求职信息');" & Chr(13)
Response.write "window.document.location.href='pers_reg3.asp';"&Chr(13)
Response.write " </script>" & Chr(13)
    Response.End
end if
if request.QueryString("type")="comp" then
Session("CompUserName")=username
Session("CompPassWord")=password
session("usertype")="comp"
session("CompLevel")=0
Session.Timeout = 30
response.Cookies("37job")("compusername")=username
response.Cookies("37job")("comppassword")=password
response.cookies("37job").Expires=date+1
Response.write " <script language='javascript'>" & chr(13)
Response.write "alert('注册成功!请接着填写公司信息');" & Chr(13)
Response.write "window.document.location.href='comp_reg3.asp';"&Chr(13)
Response.write " </script>" & Chr(13)
    Response.End
end if
end if
conn.Close
set conn=nothing
%>


  
平面设计、网站建设、三维动画、视频制作 联系QQ:114103945  回到顶部