Foxtable(狐表)用户栏目专家坐堂 → Try Catch 语句无法捕获错误


  共有5899人关注过本帖树形打印复制链接

主题:Try Catch 语句无法捕获错误

帅哥哟,离线,有人找我吗?
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/27 10:44:00 [显示全部帖子]

呵呵,楼主,就是在项目属性中找到这个事件,写上一行代码:

 

e.cancel = true

 

如此简单而已,bin在4楼讲述得很清楚了,你先测试一下嘛,直接就说看不懂,难怪bin差点崩溃,因为没办法讲得更清楚了。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/27 10:53:00 [显示全部帖子]

这个事件是捕获所有错误,如果你要单独捕获你一楼的错误,会比较麻烦,估计你的问题也在这里。

 

捕获特定错误的办法:
 
1、定义一个整数型的public变量
 
2、原来的代码改为:
 
变量名 = 100
Dim t As Table = e.Form.Controls("Table1").Table
If e.Form.Controls("txtZt").Text<>"查看状态" Then
    t.DataTable.DeleteFor("dwmc is null")
    t.AllowAddNew=False
    t.AllowEdit=False
    t.AllowDelete=False
    t.DataTable.Save
    e.Form.Controls("txtZt").Text="查看状态"
End If
Functions.Execute("ButtonZt")
变量名 = 0
 
3、BeforeShowErrorMessage 事件代码设置为:
 
if 变量名 = 100 then

    变量名 = 0
    MessageBox.Show("关键字重复或不能为空,请检查!")
end if


 
 

[此贴子已经被作者于2014-2-27 14:23:03编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/27 14:27:00 [显示全部帖子]

出错就不会执行后面的代码了

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/28 9:43:00 [显示全部帖子]

t.DataTable.Save  出错,绝对不会执行:

 

MessageBox.Show("dd")
e.Form.Controls("txtZt").Text="查看状态"
 
你的错误发生在:
 
Functions.Execute("ButtonZt")
 
 
其实你前后用messagebox.show调试一下,截知道到底是哪一行出错了。
[此贴子已经被作者于2014-2-28 9:43:07编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/28 10:42:00 [显示全部帖子]

你执行看看会显示几个数字,就知道错误出在那里了:
 
Dim t As Table = e.Form.Controls("Table1").Table
Try
    If e.Form.Controls("txtZt").Text<>"查看状态" Then
        MessageBox.Show("1")
        t.DataTable.DeleteFor("dwmc is null")
        MessageBox.Show("2")
        t.AllowAddNew=False
        t.AllowEdit=False
        t.AllowDelete=False
        MessageBox.Show("3")
        t.DataTable.Save
        MessageBox.Show("4")
        e.Form.Controls("txtZt").Text="查看状态"
        MessageBox.Show("5")
    End If
    MessageBox.Show("6")
    Functions.Execute("ButtonZt")
    MessageBox.Show("7")
Catch ex As Exception
    MessageBox.Show("关键字重复或空值,不能保存!")
End Try
 
 
[此贴子已经被作者于2014-2-28 10:41:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/28 11:09:00 [显示全部帖子]

没有跳转到Try Catch是正常的,也没有显示3,说明出错之后,其他代码没有执行,并没有如你之前所言,还执行了后面你的代码。

其实一开始就告诉你原因了,有些错误foxtable自己捕获并提示了,用try catch没有用,需要用:

http://www.foxtable.com/help/topics/2655.htm

 

说了这么多回合,又回到原点了,我还帮你写了这个事件的例子的。

[此贴子已经被作者于2014-2-28 11:09:32编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/28 11:29:00 [显示全部帖子]

1、定义一个整数型的public变量
 
2、原来的代码改为:
 
变量名 = 100
Dim t As Table = e.Form.Controls("Table1").Table
If e.Form.Controls("txtZt").Text<>"查看状态" Then
    t.DataTable.DeleteFor("dwmc is null")
    t.AllowAddNew=False
    t.AllowEdit=False
    t.AllowDelete=False
    t.DataTable.Save
    if 变量名 = 100 Then
        e.Form.Controls("txtZt").Text="查看状态"
    End if
End If
if 变量名 = 100 Then
     Functions.Execute("ButtonZt")
     变量名 = 0
End if
 
3、BeforeShowErrorMessage 事件代码设置为:
 
if 变量名 = 100 then
    变量名 = 0
    MessageBox.Show("关键字重复或不能为空,请检查!")
end if


 回到顶部