为啥为 ADORecordset 中的字段赋值会引发错误?
Posted
技术标签:
【中文标题】为啥为 ADORecordset 中的字段赋值会引发错误?【英文标题】:Why is Assigning a value to a field in ADORecordset throwing an error?为什么为 ADORecordset 中的字段赋值会引发错误? 【发布时间】:2015-10-21 16:38:30 【问题描述】:所以我正在测试示例代码并将一些在线文本粘贴到一个字段中,但我收到了一个错误,我不知道为什么。这是引发错误的整个方法:
编辑错误来自分配。然而,没有 在任意数量的其他输入字符串上引发错误。
CurNodeName = RTrim(CurNodeName)
ADORecordset.Fields.Append CurNodeName, adVarChar, 500, adFldMayBeNull
tempString = XMLValueDecode(CurNodeValue)
ADORecordset.Fields(CurNodeName).Value = tempString
...
这是传递给方法的字符串:
DoCmd 对象的大多数方法都有参数?有些是 必需,而其他是可选的。如果省略可选参数, 参数假定特定方法的默认值。为了 例如,OpenForm 方法使用七个参数,但只有第一个 参数 FormName 是必需的。以下示例显示了您如何 可以打开当前数据库中的Employees窗体。只有员工 包括标题为销售代表的。
这是确切的错误描述:
多步操作产生错误。检查每个状态值。
这就是整个故事,我只是不明白。你能告诉我为什么会发生这个错误吗?
【问题讨论】:
多步操作通常是指将一个值加载到一个不能取的变量中。但我认为你在做什么没有问题。这个对我有用。也许问题是 2003 版 Access 特有的。 尝试对文本变量进行所有替换。然后在最后设置 XMLValueDecode = TextCall Prompt()
在 Access 2003 VBA 中编译吗? Access 2010 抱怨 “未定义子或功能”
你是怎么调用函数的?
为了隔离错误,有很多事情要做减少和简化这个函数。此外,从函数中设置.Value
同时尝试应用RTrim()
肯定是不正常的。
【参考方案1】:
(从评论到另一个答案:)
adVarChar 类型和 adVarWChar 之间肯定有一些关键的区别,被设置的文本响应不同。
在许多版本(Access 2000 和 Jet 4.0 的发布)之前,Access 中的 Text
和 Memo
字段已升级为处理 Unicode。从那时起,Text
字段和参数需要引用为 adVarWChar
(最大长度为 255),而 Memo
字段和参数需要引用为 adVarWChar
或 adLongVarWChar
(带有大约 10 亿个字符的理论大小限制)。
尚不清楚为什么问题中的代码适用于某些字符串而不适用于其他字符串,但使用正确的 ("W") 数据类型肯定是先决条件。
【讨论】:
【参考方案2】:您检查过curNodeName
的类型吗?如果您已将数字类型传递给追加,则它可能会在命名字段时将其隐式转换为字符串以避免索引错误,如果是这种情况,(并且您无意中尝试将该字符串分配给字段的值当前不在集合中的索引,)您可能会抛出该多重错误,因为您试图将长度大于默认长度的字符串分配给具有当前集合之外的索引方式的字段(单独哪个错误可能会引发特定异常,但根据解析器处理这些术语的方式,它可能会在尝试分配错误代码之前评估分配的每一侧的有效性。)
我想知道的是,您是否已将字段名称和索引作为匹配对进行 debug.print(或仅计算,取决于集合大小)并尝试通过索引而不是名称将字符串分配给您的字段?
【讨论】:
如果发生了第一件事,您应该能够通过在追加和分配行中使用CStr(curNodeName)
来分配它。
令我震惊的是,这实际上是不可能的,因为 XML 的规则之一是任何标签都不能以数字开头。不过,如果它被键入为变体或其他类型,那么显式转换可能适合您。
CurNodeName 值为 SubText。 adVarChar 类型和 adVarWChar 之间必须存在一些关键区别,设置的文本对它们的响应不同。以上是关于为啥为 ADORecordset 中的字段赋值会引发错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥某些方程中的某些常数的符号在我们将其赋值为 1 时会被消除?
可以为Groovy中的if语句中的字段赋值可以使数据库更新记录