"不能为新插入的行确定标识" 什么错误??? -急=在线等

mikecat888 2003-05-30 10:47:03
AnnounceID为一自动编号字段,运行下述代码出现如下错误:
Provider 错误 '80040e1b'
不能为新插入的行确定标识。

/bbs/Savewrite.asp,行150

-------------------------------------------------------
代码如下:
-------------------------------------------------------
Set DataConn = Server.CreateObject("ADODB.Connection")
dataconn.open connstr
Set cmdTemp = Server.CreateObject("ADODB.Command")
Set InsertCursor = Server.CreateObject("ADODB.Recordset")
cmdTemp.CommandText="SELECT *, UserName FROM bbs1 WHERE (UserName IS NULL)"
cmdTemp.CommandType = 1
Set cmdTemp.ActiveConnection = dataconn
InsertCursor.Open cmdTemp, , 1, 3
InsertCursor.AddNew
InsertCursor("BoardID") = boardID
InsertCursor("ParentID") = 0
InsertCursor("Child") = 0
InsertCursor("UserName") = UserName
InsertCursor("UserEmail") =UserEmail
InsertCursor("Topic") =Topic
InsertCursor("Body") =Body
InsertCursor("DateAndTime") =DateTimeStr
InsertCursor("hits") =0
InsertCursor("length")=strlength(body)
InsertCursor("rootID")=0
InsertCursor("layer")=1
InsertCursor("orders")=0
InsertCursor("ip")=ip
InsertCursor("Expression")=Expression
InsertCursor.Update
announceid=InsertCursor("AnnounceID")
InsertCursor("RootID")= announceid
InsertCursor.Update
-------------------------------------------------------------想将上述刚刚插入的记录中的编号取出然后在插入另一个字段然后更新数据集,出错!为什么??????????请高手帮忙,用的SQLSERVER数据库 OLEDB驱动

就是在SQLSERVER 2000中插入一个记录,然后在取出刚刚插入记录的自动编号字段的ID号,然后在将其赋值到另外一个字段,如何编写!上述代码错在何处?
...全文
99 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dafu71 2003-05-30
  • 打赏
  • 举报
回复
试试这样:
......
InsertCursor("ip")=ip
InsertCursor("Expression")=Expression
InsertCursor.Update
announceid=InsertCursor("AnnounceID")
InsertCursor.close
InsertCursor.open "SELECT *, UserName FROM bbs1 WHERE announceid=" & AnnounceID
InsertCursor("RootID")= announceid
InsertCursor.Update
我一般直接用DataConn.execute "update sql更新语句"
pengdali 2003-05-30
  • 打赏
  • 举报
回复
@@IDENTITY
返回最后插入的标识值。

语法
@@IDENTITY

返回类型
numeric

注释
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。

在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。

@@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。

IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值。有关更多信息,请参见 IDENT_CURRENT。

示例
下面的示例向带有标识列的表中插入一行,并用 @@IDENTITY 显示在新行中使用的标识值。

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'

DoDone 2003-05-30
  • 打赏
  • 举报
回复
你是不是没有设置主键,把自动编号字段的ID设置为主键再试试看
erigido 2003-05-30
  • 打赏
  • 举报
回复
gz
mikecat888 2003-05-30
  • 打赏
  • 举报
回复
select max(identitycol) from bbs1
这样可以返回最后一个记录的编号,可是怎么用rs取?因为返回的字段没有列名.
mikecat888 2003-05-30
  • 打赏
  • 举报
回复
myflok(阿棋) 说的方法不成,它可以在ACCESS下通过.可是在SQLSERVER下announceid=InsertCursor("AnnounceID")只能取道空值

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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