为啥在第一次 Fetch 后出现字段计数不匹配错误?
Posted
技术标签:
【中文标题】为啥在第一次 Fetch 后出现字段计数不匹配错误?【英文标题】:Why am I getting a Field Count Mismatch error after the first Fetch?为什么在第一次 Fetch 后出现字段计数不匹配错误? 【发布时间】:2021-08-13 17:25:40 【问题描述】:我已经尝试了所有我能想到的方法,但仍然在 Fetch 中遇到错误
我正在循环每个 Select 语句的多值字段,并且需要将返回值存储在另一个多值字段中。它适用于第一个循环,然后在第二次 Fetch 时出错。
If lc_conn.IsConnected Then
For a = 0 To UBound(uniquePlans)
b = 0
SelectStatement2 = "Select Count(CSSN) as counter From cbsdta.covgold where " &_
" CEFFDT<" & todaysDate & " And (CTRMDT=0 Or CTRMDT>=" & todaysDate & ") And " &_
"CDTASRC='GIAS' AND CABSGP='" & groupNo & "' AND CPRODTA='" & uniquePlans(a) & "'"
Count2 = lc_conn.Execute(SelectStatement2, fldLstRecord2 )
if Count2 <> 0 then
While (LC_Conn.Fetch( fldLstRecord2 ) > 0) '<---- Error here on 2nd loop
redim Preserve CoveredLives(b)
Set CoveredLives(b) = fldLstRecord2.Lookup("counter").value
b = b + 1
Wend
End if
Next
doc.CoveredLives = CoveredLives
End If
感谢所有想法或建议
【问题讨论】:
我可能遗漏了一些事实,但您的结果集最多只有一行一列,因为您选择的是 COUNT(CSSN)。如果存在,单个 fetch 将返回该标量值。我希望第二次获取会引发异常。 正是我所说的。我可以得到第一个值的计数,然后它在第二个失败。您对如何让它在第二次和所有后续循环中不失败有什么建议吗? 是 FOR 循环的第二次迭代还是 WHILE 循环的错误? 将文本打印到输出日志以查看脚本失败的地方 我知道它在哪里失败,我在我的问题和代码中的多个地方都说明了它。我可以在服务器控制台上观看它,并且在每一行都有打印语句。 【参考方案1】:根据 HCL 文档中的example,Lookup
在Fetch
循环之外使用。试试这个:
Dim fieldCounter As LCField
...
Set fieldCounter = fldLstRecord2.Lookup("counter")
While (LC_Conn.Fetch( fldLstRecord2 ) > 0)
redim Preserve CoveredLives(b)
Set CoveredLives(b) = fieldCounter.value(0)
b = b + 1
Wend
LCField 的 value
始终返回一个值数组,因此您应该使用 .value(0)
。
【讨论】:
【参考方案2】:事实证明,我需要在循环中使用“删除 fldListRecord2”命令清除 fldListRecord2。一旦我添加了,一切正常。我还必须在循环中调暗 LCFieldList 以便每次都重新初始化它。
If lc_conn.IsConnected Then
ReDim Preserve CoveredLives(UBound(uniquePlans))
For a = 0 To UBound(uniquePlans)
Dim fldLstRecord2 As New LCFieldList
If (lc_conn.Execute ("Select Count(CSSN) as counter From cbsdta.covgold where " &_
" CEFFDT < " & todaysDate & " And (CTRMDT = 0 Or CTRMDT > " & todaysDate & ") And " &_
"CDTASRC = 'GIAS' AND CABSGP = '" & groupNo & "' AND CPRODTA = '" & Right(uniquePlans(a),7) & "'", fldLstRecord2) <> 0) Then
End If
Set fld = fldLstRecord2.Lookup ("counter")
While (lc_conn.Fetch(fldLstRecord2) > 0)
CoveredLives(a) = fld.text(0)
Delete fldLstRecord2
Wend
Next
doc.CoveredLives = CoveredLives
End If
感谢您的想法
【讨论】:
以上是关于为啥在第一次 Fetch 后出现字段计数不匹配错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥发送电子邮件并且不出现验证错误? (如果用户不填写主题和消息字段)