to rainstormmaster(rainstormmaster):你可能误解我的意思了,实际情况就是如ydzqw(===七条狗===)(@@我不爱做菜)所说的,如果程序跳转到errhld,那么我就能在errhld中进行处理了。但现在就是不跳到errhld中,所以想问还有什么办法能让其进行错误处理?
无法用On Error抓取的那些错误,可能得自己分析到底是什么错误吧。 如“if rs.fields(0).underlyvalue<>1 then '执行到此语句会出现错误,并且我也知道会出现错误,但上面的那句on error却不起作用,无法进入到erhld过程总,应该怎么办?”这个.underlyvalue的用法是有问题。如果改成 if rs.fields(0) <>1 then ---就没有问题。如果这样还有问题,得查一查rs集现在是在什么位置,是不是空记录。
to hf4057(神仙) :嗯,谢谢,但我要处理的是更新已被删除的记录,这样的问题你能先知道么?我只能是靠捕捉错误来进行处理
对于ado里面的错误,应该用Ado里面的Error对象来处理! 'BeginDescriptionVB 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 SubErrorHandler: ' Enumerate Errors collection and display ' properties of each Error object For Each Err In Cnxn.Errors
Debug.Print strError Next Resume NextEnd Sub 'EndDescriptionVB
to gpo2002(永吹不休) :哎,我都说了很清楚了,我连ErrorHandler都进不了,何来使用error对象处理的机会?
楼主说的情况我还没遇过,如果用不了on error的话,就试下下面的方法。希望对楼主有用。Dim conn As new ADODB.Connection On Error Resume Next conn.Open "nothing" if conn.Errors.Count>0 then 'do something here for i=0 to conn.Errors.Count-1 msgbox conn.Errors.Item(0).Description next 'set ado object as nothing end if
上面打错字了: msgbox conn.Errors.Item(i).Description
以下是我的错误处理代码: ErrHld: If Err.Number = -2147217864 Then mp_rs.Resync adAffectAllChapters, adResyncUnderlyingValues 大致意思为,在捕捉到有更新冲突后,进行异步获取underlyingvalue以进行比较。这样在更新已被更新的记录时很有用。但目前要解决的是更新已被删除记录的问题,因为已被删除的记录无法被更新,那么将会报更新行已被删除的错误,但棘手的是,ADO在接受到错误后,起先还是认为是更新冲突错误,即进入上面代码的错误处理,但在resync方法后,才发现是更新已删除记录的错误,就会提示错误(在IDE环境中提示错误,如果是EXE则提示后全盘退出,令我好伤心),我在resync方法之前用使用on error捕捉错误,可是无济于事。我用了error对象来判断错误,其结果也是一样,因为并不能直接捕捉到更新已删除记录的错误。请问各位还有什么办法么?
if rs.fields(0).underlyvalue<>1 then UnderlyingValue是什么意思,我以前没用过,下面的语句 MsgBox rs.Fields(0).UnderlyingValue 执行到这一句时出现错误"-2147467259,缺少更新或刷新的基本表信息“ 是不是这个属性的使用方法有问题?不能换用其它方法吗?人想实现什么功能?
把if rs.fields(0).underlyvalue<>1 then 该为 dim i as long on error goto Err_exit i=rs.fields(0).underlyvalue if i<>1 then ... 看这样可以吗?
to hsn1982() :搞不定,很烦。 to wang_anjun(大笨猫) :你的思路不错,但其实我用underlyingvalue来查看其实就是使用ADO的机制自动去查是否存在记录,只是返回的结果老要出错而已。如果自己去查记录,我觉得无法定位,因为我根本对用户会更新哪条记录,其键值是什么一无所知。
if rs.fields(0).underlyvalue<>1 then '执行到此语句会出现错误,并且我也知道会出现错误,但上面的那句on error却不起作用,无法进入到erhld过程总,应该怎么办?
......
on error goto errhld
if rs.fields(0).underlyvalue<>1 then .................................
为什么呢?
捕捉到了,程序不就跳转到errhld了吗?在errhld写相关处理
如“if rs.fields(0).underlyvalue<>1 then '执行到此语句会出现错误,并且我也知道会出现错误,但上面的那句on error却不起作用,无法进入到erhld过程总,应该怎么办?”这个.underlyvalue的用法是有问题。如果改成
if rs.fields(0) <>1 then ---就没有问题。如果这样还有问题,得查一查rs集现在是在什么位置,是不是空记录。
在我的程序的每个过程、函数里几乎都会有这一句,除非我肯定那里不会有错误,
VB不像Delphi一样,一出错就会全盘退出!
不应该使用VB的错误处理,应该使用ADO的错误处理,ERROR对象
试试看又:编程序的时候尽量先查条件,不能什么都靠错误处理的,错误处理是异常情况,你不能控制的情况下才用的
'BeginDescriptionVB
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 SubErrorHandler: ' 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 NextEnd Sub
'EndDescriptionVB
On Error Resume Next
conn.Open "nothing"
if conn.Errors.Count>0 then
'do something here
for i=0 to conn.Errors.Count-1
msgbox conn.Errors.Item(0).Description
next
'set ado object as nothing
end if
msgbox conn.Errors.Item(i).Description
ErrHld:
If Err.Number = -2147217864 Then
mp_rs.Resync adAffectAllChapters, adResyncUnderlyingValues
大致意思为,在捕捉到有更新冲突后,进行异步获取underlyingvalue以进行比较。这样在更新已被更新的记录时很有用。但目前要解决的是更新已被删除记录的问题,因为已被删除的记录无法被更新,那么将会报更新行已被删除的错误,但棘手的是,ADO在接受到错误后,起先还是认为是更新冲突错误,即进入上面代码的错误处理,但在resync方法后,才发现是更新已删除记录的错误,就会提示错误(在IDE环境中提示错误,如果是EXE则提示后全盘退出,令我好伤心),我在resync方法之前用使用on error捕捉错误,可是无济于事。我用了error对象来判断错误,其结果也是一样,因为并不能直接捕捉到更新已删除记录的错误。请问各位还有什么办法么?
UnderlyingValue是什么意思,我以前没用过,下面的语句
MsgBox rs.Fields(0).UnderlyingValue
执行到这一句时出现错误"-2147467259,缺少更新或刷新的基本表信息“
是不是这个属性的使用方法有问题?不能换用其它方法吗?人想实现什么功能?
dim i as long
on error goto Err_exit
i=rs.fields(0).underlyvalue
if i<>1 then ...
看这样可以吗?
to wang_anjun(大笨猫) :你的思路不错,但其实我用underlyingvalue来查看其实就是使用ADO的机制自动去查是否存在记录,只是返回的结果老要出错而已。如果自己去查记录,我觉得无法定位,因为我根本对用户会更新哪条记录,其键值是什么一无所知。
我的程序是vb+access,
当修改access库的密码后,登陆软件时程序尝试和数据库链接,
发现密码不对,就会出错,被on error捕捉到,
然后我做了相应的处理,也就是做一个输入框,叫用户软件数据库新的密码,
再跳转到与数据库链接的程序行中进行尝试与数据库链接,
如果用户输入的密码是正确的,那么链接成功,程序正常运行下去,
如果用户输入的密码有误时,程序又会出错,
本应该再次被on error捕捉到,然后再进行上面所说的处理,
可这次却没有被捉到,弹出错误提示框,然后点地击确定后退出程序了。
(第一次可以被捕捉到,第二次就不行了)这个问题到现在还没有解决呢,呵呵
解决不了呀
我试着改下,email:[email protected]
on error goto errorhandle, 这句应该能捕获到错误的