1

我正在尝试使用 VB6 读取 Lotus Notes 文档。我可以读取值,但突然抛出类型不匹配错误。当我重新初始化 vb6 变量时,它可以工作,但在某个点后停止。

前任; Lotus Notes 中的地址字段

lsaddress=ImsField(doc.address)

private function ImsField(pValue)
ImsField=pValue(0)
end function

像这样我正在阅读剩余的字段,但在某些时候抛出了运行时错误“13”类型不匹配错误。

我必须手动重新初始化

 set doc=view.getdocumentbykey(doclist)
4

3 回答 3

3

某个字段出现类型不匹配错误。问题应该是数据类型不兼容。尝试找出导致错误的字段。

使用GetItemValue()而不是短符号来访问字段并且不要使用ImsField()

lsaddress=doc.GetItemValue("address")(0)
于 2013-05-21T07:04:51.373 回答
1

发生类型不匹配是因为您遇到 pValue 不是数组的情况。当您尝试引用不存在的 NotesItem 时,就会发生这种情况。即,doc.MissingItem。

您不应使用简写符号 doc.itemName。这很方便,但会导致编码草率。您应该按照其他人的建议使用 getItemValue ,还应该检查 NotesItem 是否存在。IE,

if doc.hasItem("myItem") then
  lsaddress=doc.getItemValue("myItem")(0)
end if

Notes 和 Domino 是无模式的。除了您自己编写的内容之外,没有任何数据完整性检查。您可能认为该项目必须始终存在,但事实是,没有任何东西可以保证这一点,因此始终由您来编写代码,使其不承担任何责任。

顺便说一句:除了字段是否存在之外,您可能还需要执行其他检查。您可能还想检查字段的类型,但要做到这一点,需要在对象链上再上一层,并使用 getFirstItem 而不是 getItemValue,我不打算在这里讨论。再一次,原因是 Notes 和 Domino 是无模式的。您可能认为给定的项目必须始终是一个文本列表,但只需有人在一次性修复代理中编写草率的代码,您最终可能会得到一个该项目是数字的文档!

检查您的字段实际上是(有时)将您的字段访问封装在一个函数中的一个很好的理由,就像您尝试做的那样。我在上面添加“有时”的原因是您的代码对缺失字段的行为不一定总是相同,但是对于您只想在字段不存在时返回默认值的情况,您可以使用像这样的东西:

lsaddress ImsField("address","")

private function ImsField(fieldName,defaultValue)
    if doc.hasItem(fieldName) then
      lsaddress=doc.getItemValue(fieldName)(0)
    else
      lsaddress=defaultValue
    end if
end function
于 2013-05-21T16:03:37.190 回答
0

类型不匹配来了,

当您尝试将一种数据类型变量的值设置为另一个变量的不同数据类型时。

Eg:-

dim x as String
Dim z as variant
z= Split("Test:XXX",":")
x=z

以上将通过您提到的错误。

所以检查下面的代码......

lsaddress = ImsField(doc.address)

  • lsaddress 的数据类型是什么?
  • ImsField(doc.address) 的返回类型是什么?
    • 如果上面的函数参数是一个字符串,那么你应该传递像 (doc.address(0)) 这样的参数
于 2013-05-21T07:04:10.270 回答