【问题标题】:Why can't a close an open ADODB.Recordset?为什么不能关闭打开的 ADODB.Recordset?
【发布时间】:2016-02-01 23:19:13
【问题描述】:

我的 Python 脚本使用 ADODB.Recordset 对象。我使用带有 ADODB.Parameter 对象集合的 ADODB.Command 对象来更新集合中的记录。之后,我检查记录集的状态,它是 1,即 adStateOpen。但是当我调用 MyRecordset.Close() 时,我收到一个异常,抱怨该操作在集合的当前状态下无效。打开的记录集处于什么状态会导致关闭它无效,我可以做些什么来修复它?

代码分散在几个文件之间。我会一起制作插图。

【问题讨论】:

  • 当我想到这一点时,在我看来我所做的一切毫无意义。我创建了一个 ADODB.Recordset 对象。我更改了存储在它的几个 Field 对象中的值。然后,我创建一个 ADODB.Command 对象,并为更改的值以及我需要在 where 子句中使用的任何键值添加参数。我将这些参数的值设置为我存储在相应 ADODB.Field 对象中的任何值。然后我执行命令。最后,我尝试关闭 ADODB.Recordset 对象,即使它包含更新的值。我认为这就是问题所在。

标签: python adodb


【解决方案1】:

是的,这就是问题所在。一旦我更改了记录集的 ADODB.Field 对象之一的值,我必须使用 ADODB.Recordset.Update() 更新记录集或调用 CancelUpdate()。

我经历 ADODB.Command 对象的所有这些复杂的原因是 ADODB.Recordset.Update() 随机失败(或者在我看来)时间,抱怨“基于查询的更新失败,因为找不到要更新的行”。我一直无法预测何时会发生这种情况,也无法找到可靠的方法来防止这种情况发生。发生这种情况时,我唯一的选择是将 ADODB.Recordset.Update() 调用替换为构建完整的更新查询并使用 ADODB.Connection 或 ADODB.Command 对象执行它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2016-09-02
    • 1970-01-01
    相关资源
    最近更新 更多