为什么为ADORecordset中的字段赋值会抛出错误?

时间:2015-10-21 16:38:30

标签: vba access-vba ms-access-2003

所以我正在测试示例代码并将一些在线文本粘贴到一个字段中,我收到错误,我不知道为什么。这是抛出错误的整个方法:

  

编辑错误来自作业。但是,没有   在任意数量的其他输入字符串上抛出错误。

   CurNodeName = RTrim(CurNodeName)

   ADORecordset.Fields.Append CurNodeName, adVarChar, 500, adFldMayBeNull

    tempString = XMLValueDecode(CurNodeValue)
    ADORecordset.Fields(CurNodeName).Value = tempString

...

这是传递给方法的字符串:

  

DoCmd对象的大多数方法都有参数?有些人   必需的,而其他是可选的。如果省略可选参数,   参数假定特定方法的默认值。对于   例如,OpenForm方法使用七个参数,但只使用第一个参数   参数FormName是必需的。以下示例显示了您的方式   可以打开当前数据库中的Employees表单。只有员工   标题包括销售代表。

以下是确切的错误说明:

  

多步操作产生错误。检查每个状态值。

这就是整个故事,我只是不明白。你能告诉我为什么会发生这种错误吗?

2 个答案:

答案 0 :(得分:2)

(从评论到另一个答案:)

  

adVarChar类型和adVarWChar之间必定存在一些重要区别,即所设置的文本的响应方式不同。

在许多版本之前(Access 2000,以及Jet 4.0的发布),Access中的TextMemo字段已升级为处理Unicode。从那时起,Text字段和参数需要引用为adVarWChar(最大长度为255),而Memo字段和参数需要引用为{{1} }或adVarWChar(理论大小限制大约为10亿个字符)。

目前还不清楚为什么问题中的代码适用于某些字符串而不适用于其他字符串,但肯定使用正确的(" W")数据类型将是先决条件。

答案 1 :(得分:0)

您是否检查过curNodeName类型?如果你已经传递了一个数字类型来追加,它可能会在命名字段时隐式地将它转换为字符串以避免索引错误,如果是这种情况,(并且你无意中尝试将该字符串分配给字段的值当前不在集合中的索引,)您可能会抛出该多重错误,因为您尝试将长度超过默认长度的字符串分配给索引方式超出当前集合的字段(单独哪个错误可能会引发特定异常,但是根据解析器处理这些术语的方式,它可能会在尝试分配错误代码之前评估赋值的每一方的有效性。)

我想知道的是,如果你将debug.printed(或只计算,取决于集合大小)字段名称和索引作为匹配对,并尝试通过索引而不是名称将字符串分配给您的字段?