Vbscript &引用;无法为新插入的行确定标识“;ADO记录集之后添加新建和更新

Vbscript &引用;无法为新插入的行确定标识“;ADO记录集之后添加新建和更新,vbscript,asp-classic,ado,recordset,Vbscript,Asp Classic,Ado,Recordset,在.vbs文件中调用AddNew和Update后,尝试编辑ADO记录集记录的字段时,收到错误消息“无法为新插入的行确定标识”。但是,我能够访问从数据库返回的主键 我不是在寻找解决方法(例如,关闭记录集并通过其ID检索记录),我只是想了解发生此错误的原因。我已经在一个测试文件中简化了我的代码,以排除任何其他问题。下面您看到的是我正在执行的代码,没有包含任何文件(我已经从连接字符串中删除了凭据) 更新: 通过在第一次更新后添加以下行,我可以使此代码正常工作: rsTaskLog.AbsolutePo

在.vbs文件中调用AddNew和Update后,尝试编辑ADO记录集记录的字段时,收到错误消息“无法为新插入的行确定标识”。但是,我能够访问从数据库返回的主键

我不是在寻找解决方法(例如,关闭记录集并通过其ID检索记录),我只是想了解发生此错误的原因。我已经在一个测试文件中简化了我的代码,以排除任何其他问题。下面您看到的是我正在执行的代码,没有包含任何文件(我已经从连接字符串中删除了凭据)

更新:

通过在第一次更新后添加以下行,我可以使此代码正常工作:

rsTaskLog.AbsolutePosition = rsTaskLog.AbsolutePosition

有关移动当前记录的内容是将记录集放回可编辑的状态(MoveLast和MoveFirst也起作用)。有人知道幕后发生了什么导致了这种情况吗?

我提出的解决方案是在记录集上调用第一次更新后立即添加以下代码行:

rsTaskLog.AbsolutePosition = rsTaskLog.AbsolutePosition

出于某种原因,移动光标位置会使记录集返回一种状态,在这种状态下,可以再次调用更新而不会产生错误(MoveFirst和MoveLast也可以工作,但通过将AbsolutePosition设置为自身,我们可以保持当前位置)。我不完全确定这里的幕后情况,如果您在评论中知道,请随意详细说明。

从表面上看,您的代码似乎没有任何问题,因此问题一定出在其他地方。事实上,我只是尝试了一下,包括在同一个连接上打开两个记录集,没有任何问题——我可以根据需要多次更新我新添加的记录。您确定ScheduledTaskLog表定义了主键,即不仅仅是自动生成的ID吗?老实说,我发现这种更新记录的方法非常糟糕。为什么不(如果可以的话)在目标数据库上创建一个存储过程并将表单值传递给该数据库?您可以让一个SP记录新记录的条目并返回记录主键,然后让另一个SP更新记录主键。如果你不能这样做,那么直接在你的代码中写一个参数化的插入和更新。我只是从纯学术的角度问,是哪种潜在的机制阻止了这段代码的正确运行。Martha,我已经对代码进行了足够的简化,我不认为其他任何东西会影响它,但明天我将尝试最简单的实现,只是为了确定。考虑到它应该可以工作,而且对我来说也可以工作,我唯一能想到的是,您在特定的SQL Server版本中遇到了某种微妙的错误,和/或所述版本与服务器OS/IIS/ODBC/等版本之间的交互。我知道这不是一个特别令人满意的答案(特别是考虑到它无法证明的性质),但这是我得到的最好的答案;据我所知,在升级到win 10之前,我没有使用该驱动程序,这导致驱动程序=SQL Server出现其他问题;我在用。下面的答案使它起作用
rsTaskLog.AbsolutePosition = rsTaskLog.AbsolutePosition