Visual Basic应用程序中的错误440

时间:2013-01-22 09:44:20

标签: vba vb6 ado

我的一个客户端正在运行一个旧的VB应用程序。 这个代码中有一个例外:

cn=GetIndexDatabaseConnectionString()
sSql="SELECT * FROM Arh_Naroc WHERE StNarocila = '" & isci & "'"                            
rs=CreateObject("ADODB.Recordset")
Call rs.Open(sSql,cn)

rs.Open()函数中发生异常。 “错误号码440发生了。”

这是KOFAX引擎的SBL脚本,它已有很多年了。 整个SW从旧的XP计算机转移到Windows 7,看起来到处都有问题。

有人可以帮我确定这里的问题。至少如果我能在msgbox中收到正确的错误消息,那将是最有帮助的。

编辑: 这是连接字符串函数。

Function GetIndexDatabaseConnectionString
 Dim objXmlDocument As Object
 Dim objXmlGlobalSettingsFileParh As Object
 Dim objXmlIndexDatabaseConnectionString As Object
 Dim strGlobalSettingsFilePath As String
 Dim strTemp As String
 Const strSettingsFilePath = "C:\Data\LocalDocsDistibutingSystem\Settings.xml"
 Set objXmlDocument = CreateObject("MSXML2.DOMDocument")
 objXmlDocument.Load strSettingsFilePath
 Set objXmlGlobalSettingsFileParh = objXmlDocument.selectSingleNode("DocsDistributingSystem/GlobalSettingsFilePath")
 strGlobalSettingsFilePath = objXmlGlobalSettingsFileParh.childNodes(0).Text
 Set objXmlGlobalSettingsFileParh = Nothing
 Set objXmlDocument = Nothing
 Set objXmlDocument = CreateObject("MSXML2.DOMDocument")
 objXmlDocument.Load strGlobalSettingsFilePath
 Set objXmlIndexDatabaseConnectionString = objXmlDocument.selectSingleNode("DocsDistibutingSystem/AscentCapture/IndexDatabase/ConnectionString")
 strTemp = objXmlIndexDatabaseConnectionString.childNodes(0).Text
 Set objXmlIndexDatabaseConnectionString = Nothing
 Set objXmlDocument = Nothing
 GetIndexDatabaseConnectionString = strTemp
End Function

这是来自Settings.xml的相关行:

<ConnectionString> Provider=OraOLEDB.Oracle;Data Source=LINO2;User Id=****;Password=****;OLEDB.NET=True; </ConnectionString>

真实数据用*屏蔽。与Oracle的连接似乎没问题。我使用提供程序和连接数据创建了ODBC和链接服务器到sql。有用。必须在计算机上安装缺少的东西才能使ADODB正常工作......

连接似乎正常。初始化时没有错误。 调用rs.Open(sSql,cn)时发生错误。我想要的只是发生错误时的详细错误消息... 非常感谢。

2 个答案:

答案 0 :(得分:7)

正如它在MS知识库中所述

  

执行方法或获取或设置时出错   对象变量的属性。错误是由报告的   创建对象的应用程序。检查Err的属性   用于确定错误的来源和性质的对象。也尝试使用   在访问之前的On Error Resume Next语句   声明,然后立即检查错误   访问声明。

因此他们建议以类似的方式检查Err对象:

If Err.Number <> 0 Then
  Msg = "Error: " & Str(Err.Number) & ", generated by " _
      & Err.Source & ControlChars.CrLf & Err.Description
  MsgBox(Msg, MsgBoxStyle.Information, "Error")
End If

因此,这将带回MsgBox中的错误,但如果您希望它更容易复制和放大,您可以使用Response.Write。粘贴等..

答案 1 :(得分:3)

获取错误描述,您可以执行以下操作:

Function GetIndexDatabaseConnectionString()
  On Error GoTo Errorfound
  'your
  'function
  'body
Exit Function
Errorfound:
  With Err
    MsgBox "Source: " & .Source & vbCrLf & "Desc: " & .Description, vbCritical, "Error " & CStr(.Number)
  End With 'Err
End Function