2

我的一个客户正在运行一个旧的 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 正常工作...

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

4

2 回答 2

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。

于 2013-01-22T09:48:23.680 回答
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
于 2013-01-22T15:20:58.137 回答