尝试连接到oracle数据库时出现内存不足错误(VB6)
当我试图使用oracle连接字符串设置记录集时,内存不足错误 在线“rsLIS.opensql、gConnLIS、adOpenStatic、adLockReadOnly” 然而,有时它的效果就像5-6次尝试中的一次 但当它工作时,它会在另一行上产生错误 在第行“如果rsLink.Fields(2).value=rsLIS.Fields(1).value,则” 以下是我尝试过的东西:尝试连接到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
公共函数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
属性也很可能是内存不足错误的原因,因为我似乎记得,为了确定记录的数量,它会加载所有记录(从服务器)来对它们进行计数。但我可能错了。我的目标:
你能重新格式化你的帖子,使所有的源代码都能正确格式化吗?还有:错误发生在哪里(哪一行)?看起来现在是正确的。现在看一看错误在第行“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