尝试连接到oracle数据库时出现内存不足错误(VB6)

尝试连接到oracle数据库时出现内存不足错误(VB6),oracle,vb6,Oracle,Vb6,当我试图使用oracle连接字符串设置记录集时,内存不足错误 在线“rsLIS.opensql、gConnLIS、adOpenStatic、adLockReadOnly” 然而,有时它的效果就像5-6次尝试中的一次 但当它工作时,它会在另一行上产生错误 在第行“如果rsLink.Fields(2).value=rsLIS.Fields(1).value,则” 以下是我尝试过的东西: 我没有直接使用记录集,而是尝试创建数组(GetRows)方法 即使记录集计数为26,但数组的UBound显示为1

当我试图使用oracle连接字符串设置记录集时,内存不足错误

在线“rsLIS.opensql、gConnLIS、adOpenStatic、adLockReadOnly

然而,有时它的效果就像5-6次尝试中的一次

但当它工作时,它会在另一行上产生错误

在第行“如果rsLink.Fields(2).value=rsLIS.Fields(1).value,则

以下是我尝试过的东西:

  • 我没有直接使用记录集,而是尝试创建数组(GetRows)方法
  • 即使记录集计数为26,但数组的UBound显示为1

  • 我试图将第三个参数值从静态改为仅向前 行“rsLIS.Open sql、gConnLIS、adOpenStatic、adLockReadOnly”
  • 它也不起作用,它将recordset.count显示为0

  • 在重新启动客户端系统后是否尝试过仍然相同
  • 我在客户端遇到了这个错误,因为在我的位置上,我没有可调试的开发环境

    错误为“内存不足”

    公共函数GetResults_New(MachName为String,patid为String,bCheckDate为Boolean,sendsaary为Boolean)为ADODB.Recordset
    关于错误转到错误描述
    调用ShowTempMsg(“第1行”)
    作为布尔值的Dim bXVar
    作为整数的Dim i,j
    变暗tmplis,tmporder
    暗压
    bXVar=False
    Dim rec_结果作为新ADODB.记录集
    Dim rsLink作为新的ADODB.Recordset
    将rsLIS设置为新的ADODB.Recordset
    Dim xSampleIdType作为字符串
    gAppPath=AddEditINIfile(“VAHSIF.INI”、“IF”、“sLinkPath”和“”)
    xsampledType=addeditinfile(gAppPath&“\sLinkConfig.ini”,MachName,“SampleIdType”,“SampleId1”,False)
    呼叫开放连接
    呼叫打开\u连接\u LIS
    rec_result.CursorLocation=adUseClient
    如果sendasay=True,则
    rec_result.Fields.Append“machineparamid”,adBSTR,50
    rec_result.Fields.Append“Assayno”,adBSTR,50
    rec_result.Fields.Append“SType”,adBSTR,50
    记录结果字段。附加“稀释”,adBSTR,50
    其他的
    rec_result.Fields.Append“machineparamid”,adBSTR,50
    rec_result.Fields.Append“SType”,adBSTR,50
    记录结果字段。附加“稀释”,adBSTR,50
    如果结束
    rec_result.Open
    \
    '映射参数的链接查询。
    sql=“从EquipParam、EquipParamMapping中选择EquipParamMapping.EquipId、EquipParamMapping.EquipParamCode、EquipParamMapping.LISParamCode、EquipParamMapping.EquipParamMapping.EquipAssessNo,其中EquipParamMapping=EquipParamMapping.EquipId和EquipParamCode=EquipParamMapping“'和EquipParam.isProgram='Y'”
    **打开sql、gConn、adOpenStatic、adLockReadOnly**
    如果enumConnTo=connOracle,则
    sql=“从SL_21CI_视图_sampleid_顺序中选择”&xsampledType&“、LIS_参数_代码,其中”&xsampledType&“| |后缀码=””、&patid&“,且不适用于“N”
    其他的
    sql=“从SL_21CI_视图_sampleid_顺序中选择”&xsampledType&“、LIS_参数_代码,其中”&xsampledType&“+cast(后缀代码为varchar(20))=”””&patid&“,且适用于“N”
    如果结束
    OpenSQL、gConnLIS、adOpenStatic、adLockReadOnly
    而不是rsLIS.EOF
    如果bXVar=True,则
    rsLink.MoveFirst
    bXVar=False
    如果结束
    而不是rsLink.EOF
    bXVar=True
    **如果rsLink.Fields(2).value=rsLIS.Fields(1).value,则**
    如果sendasay=True,则
    rec_result.AddNew
    记录结果(“machineparamid”)=rsLink.Fields(“EquipParamCode”)
    记录结果(“分析编号”)=rsLink.Fields(“设备分析编号”)
    记录结果(“SType”)=“”
    记录结果(“稀释度”)=“0”
    rec_result.Update
    rec_result.MoveFirst
    其他的
    rec_result.AddNew
    记录结果(“machineparamid”)=rsLink.Fields(“EquipParamCode”)
    记录结果(“SType”)=“”
    记录结果(“稀释度”)=“0”
    rec_result.Update
    rec_result.MoveFirst
    如果结束
    转到下一页
    如果结束
    rsLink.MoveNext
    温德
    下一页:
    rsLIS.MoveNext
    温德
    设置GetResults\u New=rec\u结果
    退出功能
    错误描述:
    调用insertintologywithfilename(“Transaction.GetResults\u New”&vbNewLine&sql&vbNewLine&err.Description&“ErrLine:&ErrLine”)
    端函数
    

    感谢

    这仍然留下了错误发生在哪一行的问题。另外:“它也不起作用,它将recordset.count显示为0”。recordset.count属性取决于提供程序。请改用类似于此的函数:

    Public Function RecordCount(ByVal cn As ADODB.Connection, ByVal sTable As String) As Long
    
      Dim sSQL As String, lRetVal as Long
      Dim rs As ADODB.Recordset
    
      Set rs = New ADODB.Recordset
    
      sSQL = "SELECT COUNT(1) AS RecCount FROM " & sTable & ";"
      Call rs.Open(sSQL, cn)
    
      If Not (rs.BOF And rs.EOF) Then
        lRetVal = rs.Fields("RecCount").Value
      Else
        lRetVal = -1
      End If
    
      Call rs.Close
      Set rs = Nothing
    
      RecordCount = lRetVal
    
    End Function
    
    .Count
    属性也很可能是内存不足错误的原因,因为我似乎记得,为了确定记录的数量,它会加载所有记录(从服务器)来对它们进行计数。但我可能错了。

    我的目标:

  • 需要根据一个参数获取所有记录(数据库访问) --它将返回最多30行(例如A、B、C列)表1 ---我正在将此添加到一个记录集中

  • 需要根据一个参数获取所有记录(数据库-oracle) --它将返回大约30-35条记录(c列,d列)表2 我正在将此添加到另一个记录集中

  • 下一行将匹配我需要进一步处理的两个查询的输出 --(表1.C=表2.C我需要这些数据来进一步处理) --无论哪个匹配项,我都会将其添加到另一个记录集中并返回该记录集


  • 你能重新格式化你的帖子,使所有的源代码都能正确格式化吗?还有:错误发生在哪里(哪一行)?看起来现在是正确的。现在看一看错误在第行“rsLIS.Open sql,gConn”
    Public Function RecordCount(ByVal cn As ADODB.Connection, ByVal sTable As String) As Long
    
      Dim sSQL As String, lRetVal as Long
      Dim rs As ADODB.Recordset
    
      Set rs = New ADODB.Recordset
    
      sSQL = "SELECT COUNT(1) AS RecCount FROM " & sTable & ";"
      Call rs.Open(sSQL, cn)
    
      If Not (rs.BOF And rs.EOF) Then
        lRetVal = rs.Fields("RecCount").Value
      Else
        lRetVal = -1
      End If
    
      Call rs.Close
      Set rs = Nothing
    
      RecordCount = lRetVal
    
    End Function