提供程序错误
发生提供程序错误时,将返回 -2147467259 的运行时错误。 收到此错误时,请检查活动 连接 对象的 错误 集合,该对象将包含描述所发生情况的一个或多个错误。
ADO 错误集合
由于特定的 ADO 操作可以生成多个提供程序错误,因此 ADO 通过 Connection 对象公开错误对象的集合。 如果操作成功完成,此集合不包含任何对象;如果出现问题并且提供程序引发一个或多个错误,则包含一个或多个 错误 对象。 检查每个错误对象以确定错误的确切原因。
完成处理发生的任何错误后,可以通过调用 Clear 方法清除集合。 在您对 Recordset 对象调用 Resync、UpdateBatch或 CancelBatch 方法,或对 Connection 对象调用 Open 方法,或在 Recordset 对象上设置 Filter 属性之前,显式清除 Errors 集合尤其重要。 通过显式清除集合,可以确定集合中的任何 错误 对象都不会从以前的操作中留下。
除了错误之外,某些操作还可以生成警告。 警告也体现为 Errors 集合中的 错误 对象。 当提供程序向集合中添加警告时,它不会生成运行时错误。 检查 Errors 集合的 Count 属性,以确定某个特定操作是否生成了警告。 如果计数为一个或多个,则已将 错误 对象添加到集合中。 一旦确定 Errors 集合包含错误或警告,就可以循环访问集合并检索其包含的每个 Error 对象的相关信息。 以下简短的 Visual Basic 示例演示了这一点:
' BeginErrorHandlingVB02
Private Function DeleteCustomer(ByVal CompanyName As String) As Long
On Error GoTo DeleteCustomerError
rst.Find "CompanyName='" & CompanyName & "'"
DeleteCustomerError:
Dim objError As ADODB.Error
Dim strError As String
If cnn.Errors.Count > 0 Then
For Each objError In cnn.Errors
strError = strError & "Error #" & objError.Number & _
" " & objError.Description & vbCrLf & _
"NativeError: " & objError.NativeError & vbCrLf & _
"SQLState: " & objError.SQLState & vbCrLf & _
"Reported by: " & objError.Source & vbCrLf & _
"Help file: " & objError.HelpFile & vbCrLf & _
"Help Context ID: " & objError.HelpContext
Next
MsgBox strError
End If
End Function
' EndErrorHandlingVB02
错误处理例程包括一个 for Each 循环,用于检查 Errors 集合中的每个对象。 在此示例中,它将累积一条消息以供显示。 在工作程序中,你将编写代码以为每个错误执行合适的操作,例如关闭所有打开的文件并有序关闭程序。
错误对象
通过检查 错误 对象,可以确定发生了什么错误,更重要的是,哪个应用程序或哪个对象导致了错误。 Error 对象具有以下属性:
属性名称 | 描述 |
---|---|
说明 | 发生错误的文本说明。 |
HelpContext、HelpFile | 请参阅帮助主题和帮助文件,其中包含所发生的错误的说明。 |
NativeError | 提供程序特定的错误号。 |
编号 | 一个长整数,表示发生的错误在 ErrorValueEnum中列出的编号。 |
来源 | 指示生成错误的对象或应用程序的名称。 |
SQLState | 执行 SQL 语句过程中提供程序返回的由五个字符组成的错误代码。 |
ADO Error 对象与标准 Visual Basic Err 对象非常相似。 其属性描述发生的错误。 除了错误数外,还会收到两条相关的信息。 NativeError 属性包含特定于所使用的提供程序的错误号。 在前面的示例中,提供程序是适用于 SQL Server 的 OLE DB 提供程序Microsoft,因此,NativeError 将包含特定于 SQL Server 的错误。 SQLState 属性具有五个字母的代码,用于描述 SQL 语句中的错误。
Event-Related 错误
当发生与事件相关的错误时,也会使用 Error 对象。 可以通过检查作为事件参数传递的 Error 对象来确定在引发 ADO 事件的进程中是否发生了错误。
如果成功结束导致事件的操作,事件处理程序的 adStatus 参数将设置为 adStatusOK。 另一方面,如果引发事件的操作失败,则 adStatus 参数设置为 adStatusErrorsOccurred。 在这种情况下,pError 参数将包含描述错误的 Error 对象。