msdn如下内容on error goto 0 '取消错误 on error resume next '忽略 error '丢出错误 stop '调试的时候停止可以配合如上语句处理完错误返回sub程序。增加一个byref类型的参数表示状态。
建议楼主赶紧到这上面,把“(800 KB). IDE: Visual Basic 6.0”那个插件装上 http://www.mztools.com/v3/download.aspx 他会在VB IDE中增加工具栏,其中有一个按钮就是加错误处理的,比如 Sub t1()End Sub 你点一下,就变为 Sub t1() On Error GoTo t1_Error On Error GoTo 0 Exit Subt1_Error: MsgBox "错误 " & Err.Number & " (" & Err.Description & ") in procedure t1 of Form Form1" End Sub
不好意思,大概是我没有说清楚,我不是想处理异常的错误,从我自己的编程习惯出发,我也很少使用On Error GoTo的语句,现在是我写了一个函数,专门来获取人员信息。比如Public Function get_student(Stdid As String) As student Dim rs As New ADODB.Recordset rs.Open "select * from students,std_class where stdid='" & Stdid & "' and std_class.classno=students.classno", cn, adOpenStatic, adLockReadOnly If Not rs.EOF Then get_student.stdname = Trim(rs.Fields("stdname")) get_student.xb = Trim(rs.Fields("xb")) End If rs.Close End Function那么在程序中调用这个函数的时候,如果出现rs.eof=true,就是相应的stdid不存在对应数据的时候怎么处理,比如在程序中stdinfo = get_student(Stdid),如果找不到数据能否直接出现提示信息,没有找到该用户信息,并且退出调用的程序段,因为后面需要调用用户的详细信息了。 不知道这样是否表述清楚了,谢谢各位了。 从其他意义上来讲,如果非要用On Error GoTo语句,似乎也能解决问题,但感觉上不是很严谨,还有没有更严格的处理方法。
On Error GoTo和是否严谨没有关系。推荐你看一本书《Visual Basic 防御性编程》,老美写的,要去图书馆看了。 你在网上看的代码,是自身写得很不规范,和用了On Error GoTo无关。你说的要显示错误信息,可以依赖Err.Description和Err.Number来取得。
错误处理少不了on error.....,我觉得严格的说,你的问题实际上不只是错误处理问题,还有方法问题,比如如下就是一种方法:Public Function get_student(Stdid As String,myStudent As student,optional msg as string) as long on error goto err_ Dim rs As New ADODB.Recordset rs.Open "select * from students,std_class where stdid='" & Stdid & "' and std_class.classno=students.classno", cn, adOpenStatic, adLockReadOnly If Not rs.EOF Then myStudent.stdname = Trim(rs.Fields("stdname")) myStudent.xb = Trim(rs.Fields("xb")) get_student=1 else get_student=0 End If rs.Close exit function err_: get_student=-1 msg=err.description End Function 如上你就可以根据get_student的值来处理具体问题了....
Public Function get_student(Stdid As String,myStudent As student,optional msg as string) as long on error goto err_ Dim rs As New ADODB.Recordset rs.Open "select * from students,std_class where stdid='" & Stdid & "' and std_class.classno=students.classno", cn, adOpenStatic, adLockReadOnly If Not rs.EOF Then myStudent.stdname = Trim(rs.Fields("stdname")) myStudent.xb = Trim(rs.Fields("xb")) get_student=1 else get_student=0 End If rs.Close exit function err_: get_student=-1 msg=err.description End Function 这个还不如写成类,直接返回属性和集合。
On Error GoTo BadData Trains(lngTrainNo).LateMinute = txtLateEdit(3).Text On Error GoTo 0 'Trains(lngTrainNo).PathNo = cbUsePath.ItemData(cbUsePath.ListIndex)
Trains(lngTrainNo).PathNo = cbUsePath.ListIndex
For i = lngLedTrains To 1 Step -1 If LedTrains(i).InnerTrain = txtLateEdit(0).Text Then RemoveMemoryLedTrain i End If Next For i = 1 To lstTrainPosition.ListCount If lstTrainPosition.Selected(i - 1) Then AddMemoryLedTrain i, txtLateEdit(0).Text End If Next lngLastMinute = -1 StaBar.Panels(1).Text = "已保存。" i = lstTrains.ListIndex LoadTrainsList lstTrains.ListIndex = i SaveLate = True Exit Function BadData: MsgBox "请录入正确的晚点时间,以分为单位,-1是晚点未定", vbOKOnly + vbInformation, "晚点修改、候车室及股道变更" txtLateEdit(i).SetFocus StaBar.Panels(1).Text = "未保存。" SaveLate = False
on error resume next '忽略
error '丢出错误
stop '调试的时候停止可以配合如上语句处理完错误返回sub程序。增加一个byref类型的参数表示状态。
http://www.mztools.com/v3/download.aspx
他会在VB IDE中增加工具栏,其中有一个按钮就是加错误处理的,比如
Sub t1()End Sub
你点一下,就变为
Sub t1() On Error GoTo t1_Error On Error GoTo 0
Exit Subt1_Error: MsgBox "错误 " & Err.Number & " (" & Err.Description & ") in procedure t1 of Form Form1"
End Sub
public sub subAA()
On Error Goto errSub
Exit Sub
errSub:
end Sub
cn_desc.Execute strtmp
On Error GoTo 0
errline: '这里处理错误
Text1 = Text1 & str & " 错误原因: " & Err.Description & Chr(13) & Chr(10) '给出错误信息
Text1 = Text1 & "---------------------------------------------------" & Chr(13) & Chr(10)
Resume Next '继续执行后面的程序
Dim rs As New ADODB.Recordset
rs.Open "select * from students,std_class where stdid='" & Stdid & "' and std_class.classno=students.classno", cn, adOpenStatic, adLockReadOnly
If Not rs.EOF Then
get_student.stdname = Trim(rs.Fields("stdname"))
get_student.xb = Trim(rs.Fields("xb"))
End If
rs.Close
End Function那么在程序中调用这个函数的时候,如果出现rs.eof=true,就是相应的stdid不存在对应数据的时候怎么处理,比如在程序中stdinfo = get_student(Stdid),如果找不到数据能否直接出现提示信息,没有找到该用户信息,并且退出调用的程序段,因为后面需要调用用户的详细信息了。
不知道这样是否表述清楚了,谢谢各位了。
从其他意义上来讲,如果非要用On Error GoTo语句,似乎也能解决问题,但感觉上不是很严谨,还有没有更严格的处理方法。
你在网上看的代码,是自身写得很不规范,和用了On Error GoTo无关。你说的要显示错误信息,可以依赖Err.Description和Err.Number来取得。
on error goto err_
Dim rs As New ADODB.Recordset
rs.Open "select * from students,std_class where stdid='" & Stdid & "' and std_class.classno=students.classno", cn, adOpenStatic, adLockReadOnly
If Not rs.EOF Then
myStudent.stdname = Trim(rs.Fields("stdname"))
myStudent.xb = Trim(rs.Fields("xb"))
get_student=1
else
get_student=0
End If
rs.Close
exit function
err_:
get_student=-1
msg=err.description
End Function
如上你就可以根据get_student的值来处理具体问题了....
8楼这个不错,支持!
再次感谢。
Public Function get_student(Stdid As String,myStudent As student,optional msg as string) as long
on error goto err_
Dim rs As New ADODB.Recordset
rs.Open "select * from students,std_class where stdid='" & Stdid & "' and std_class.classno=students.classno", cn, adOpenStatic, adLockReadOnly
If Not rs.EOF Then
myStudent.stdname = Trim(rs.Fields("stdname"))
myStudent.xb = Trim(rs.Fields("xb"))
get_student=1
else
get_student=0
End If
rs.Close
exit function
err_:
get_student=-1
msg=err.description
End Function
这个还不如写成类,直接返回属性和集合。
Trains(lngTrainNo).LateMinute = txtLateEdit(3).Text
On Error GoTo 0
'Trains(lngTrainNo).PathNo = cbUsePath.ItemData(cbUsePath.ListIndex)
Trains(lngTrainNo).PathNo = cbUsePath.ListIndex
For i = lngLedTrains To 1 Step -1
If LedTrains(i).InnerTrain = txtLateEdit(0).Text Then
RemoveMemoryLedTrain i
End If
Next
For i = 1 To lstTrainPosition.ListCount
If lstTrainPosition.Selected(i - 1) Then
AddMemoryLedTrain i, txtLateEdit(0).Text
End If
Next
lngLastMinute = -1
StaBar.Panels(1).Text = "已保存。"
i = lstTrains.ListIndex
LoadTrainsList
lstTrains.ListIndex = i
SaveLate = True
Exit Function
BadData:
MsgBox "请录入正确的晚点时间,以分为单位,-1是晚点未定", vbOKOnly + vbInformation, "晚点修改、候车室及股道变更"
txtLateEdit(i).SetFocus
StaBar.Panels(1).Text = "未保存。"
SaveLate = False