ADO错误捕获

96091103 2002-03-02 09:55:43
请问,当我试图捕获一个ADO错误(我是用连接一个不存在的.mdb文件来产生错误的)时,为什么VB并没有跳到Handle那行,而是在.Open处产生了实时错误?
On Error GoTo Handle
Dim cnnConnection As ADODB.Connection
Set cnnConnection = New ADODB.Connection
With cnnConnection
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Data.mdb"
.Mode = adModeReadWrite
.CursorLocation = adUseClient
.Open
End With
On Error GoTo 0
Exit Sub
Handle:
MsgBox Err.Description
...全文
167 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
alinker 2002-03-04
  • 打赏
  • 举报
回复
^-^
junglerover 2002-03-03
  • 打赏
  • 举报
回复
我认为,这个恐怕是你的VB编辑器设置问题。
选“工具|选项”,里面你是否设置了“在发生错误时中断”(Break on all errors)?
改为“在未捕获的错误时中断”就应该可以了。
jett 2002-03-03
  • 打赏
  • 举报
回复
有的错误vb可能抓不到
所以不行的话就自己抓可能的错误
比如判断文件是否存在
老熊宝宝 2002-03-03
  • 打赏
  • 举报
回复
请使用带事件的方式声明ADO对象,如下:
Private WithEvents cn As Connection
Private WithEvents rs As Recordset

Event FactoryMessage(strMessage As String)

Public Enum FactoryErrorEnum
feCantConnect = vbObjectError + 512 + 104268
feCantGetProduct = vbObjectError + 512 + 104269
End Enum
'

Private Sub Class_Initialize()
On Error GoTo ErrHandler

Set cn = New Connection
cn.Provider = "Microsoft.Jet.OLEDB.3.51"
cn.ConnectionString = GetDBPath()
cn.Open

Exit Sub
ErrHandler:
If Err <> 0 Then
Err.Raise feCantConnect, "CFactory-Initialize", "Can't connect to database."
End If

End Sub
yanz 2002-03-03
  • 打赏
  • 举报
回复
问题我以前也碰到过,代码也差不多,但不是VB编辑器的事

我那时有时可截获错误,有时不能截获,后来不知为何自己就好了。

不过你那个Handle最好换个名,别和保留字冲突
96091103 2002-03-03
  • 打赏
  • 举报
回复
感谢junglerover(灌木丛)和所有提供帮助的人。
问题已经解决,谢谢各位。^_^
gpo2002 2002-03-03
  • 打赏
  • 举报
回复
sonicdater(发呆呆(我答问题*不吵架*因为我呆))贴的运行后可以跳到错误处理里面啊。
96091103 2002-03-02
  • 打赏
  • 举报
回复
楼上两位仁兄的回复我在MSDN和ADO的CHM中见过,都不能解决这个问题。能否与SP有关?我装的是VB6,没装SP。谢谢二位^_^
gpo2002 2002-03-02
  • 打赏
  • 举报
回复
ADO对象模型本身包含了Error对象
------------------------------
Errors 集合 (ADO)


Errors 集合包含为响应涉及提供者的单个错误而创建的所有 Error 对象。




说明

任何涉及 ADO 对象的操作都可能产生一个或多个提供者错误。产生错误时,可以将一个或多个 Error 对象置于 Connection 对象的 Errors 集合中。其他 ADO 操作产生错误时,将清空 Errors 集合,并且将新的 Error 对象置于 Errors 集合中。

每个 Error 对象代表特定的提供者错误,而不是 ADO 错误。ADO 错误被记载在运行时的异常处理机制中。例如,在 Microsoft Visual Basic 中,出现特定 ADO 的错误将引发 On Error 事件,并且该错误将出现在 Err 对象中。

没有产生错误的 ADO 操作对 Errors 集合没有影响。使用 Clear 方法可手工清除 Errors 集合。

Errors 集合中的 Error 对象集合描述响应单个语句时产生的所有错误。枚举 Errors 集合中的指定错误可使错误处理例程更精确地确定产生错误的原因及错误来源,并采取相应的补偿措施。

某些属性和方法将返回警告,警告显示为 Errors 集合中的 Error 对象,但并不中止程序的执行。在调用 Recordset 对象的 Resync、UpdateBatch 或 CancelBatch 方法,Connection 对象的 Open 方法,或者设置 Recordset 对象的 Filter 属性之前,请调用 Errors 集合上的 Clear 方法以便您可以阅读 Errors 集合的 Count 属性来测试返回的警告。
sonicdater 2002-03-02
  • 打赏
  • 举报
回复
你试试 ADO 的 Error 对象。
用它来 捕获错误。
==========================================
Public Sub DescriptionX()

Dim Cnxn As ADODB.Connection
Dim Err As ADODB.Error
Dim strError As String

On Error GoTo ErrorHandler

' Intentionally trigger an error
Set Cnxn = New ADODB.Connection
Cnxn.Open "nothing"

Exit Sub

ErrorHandler:

' Enumerate Errors collection and display
' properties of each Error object
For Each Err In Cnxn.Errors

strError = "Error #" & Err.Number & vbCr & _
" " & Err.Description & vbCr & _
" (Source: " & Err.Source & ")" & vbCr & _
" (SQL State: " & Err.SQLState & ")" & vbCr & _
" (NativeError: " & Err.NativeError & ")" & vbCr
If Err.HelpFile = "" Then
strError = strError & " No Help file available"
Else
strError = strError & _
" (HelpFile: " & Err.HelpFile & ")" & vbCr & _
" (HelpContext: " & Err.HelpContext & ")" & _
vbCr & vbCr
End If

Debug.Print strError
Next

Resume Next

End Sub

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧