为啥在第一次 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,LookupFetch 循环之外使用。试试这个:

       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 后出现字段计数不匹配错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥mongo计数不加起来?

为啥我的 Axios fetch 会出现 CORS 错误?

为啥启用 CORS 后仍然出现 CORS 错误

为啥发送电子邮件并且不出现验证错误? (如果用户不填写主题和消息字段)

PHP require 在清除 APC 缓存后仅工作一次,然后出现 500 错误。为啥?

为啥 ionic run ios 会出现“未找到匹配的配置文件”错误?