以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  网络故障时如何避免连续弹出错误?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=192318)

--  作者:HappyFt
--  发布时间:2024/6/13 12:05:00
--  网络故障时如何避免连续弹出错误?
如题,当正在使用中的项目网络出问题时,用户界面就会出错,弹出一大堆关不完的窗口,
有没有办法此时仅弹出一个对话框提示网络出问题了,但不要再弹出其他错误的窗口来
现在是在NetWorkAddressChanged事件中判断网络状态,2秒连接不上就弹出一个提示框,
If TryConnectHost(db_IP) Then
    Dim myConnStr As New ConnStr.ConnNetStr
    Vars("网络状态") = myConnStr.ConnNetStrByConnStr(Connections(Mydata).ConnectionString, 2000) \'2秒内判断网络
    If Vars("网络状态") = True Then
        If Forms("网络提示").Opened Then  \'关闭网络断开时弹出的提示框
            Forms("网络提示").Close
        End If
    End If
End If

这种情况如何才能友好的禁止后面正在运行的代码执行?
谢谢!

--  作者:有点蓝
--  发布时间:2024/6/13 12:21:00
--  
到这个事件禁掉:http://www.foxtable.com/webhelp/topics/2655.htm,e.cancel=true,不过禁掉前最好使用日志记录一下错误,不然正常的错误都屏蔽掉,就无法跟踪解决问题了
--  作者:HappyFt
--  发布时间:2024/6/13 14:28:00
--  
已经在beforeShowErrorMessage事件中用了下面的代码:
If e.Message2.indexof("一般性网络错误") > -1 Or e.Message2.indexof("SQL Server 不存在") > -1 Then
    e.Cancel = True
    If Forms("网络提示").Opened = False Then
        Forms("网络提示").Open
    End If
ElseIf e.Message2.indexof("查询超时已过期") > -1
    e.Cancel = True
    msgbox("查询超时,请检查网络!")
Else
    CanSave = False
    msgbox("执行中出现异常,请联系管理员!")
End If
因为网络中断时用户可能正在执行一堆的代码,断网时虽然有上述提示,但用户响应后后面就会接着弹出相关的一堆错误了

--  作者:有点蓝
--  发布时间:2024/6/13 14:51:00
--  
e.Cancel = True放到第一行,把所有错误都屏蔽掉
--  作者:HappyFt
--  发布时间:2024/6/13 22:06:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20240613220011.png
图片点击可在新窗口打开查看

beforeShowErrorMessage事件中仅使用 e.Cancel = True 一句代码

在导航中点击一个表单后马上拔掉网线还是会出现类似上面的一系列出错窗口,也就是点击表单后需要打开窗口加载数据显示目录树等
是不是这个事件不能捕捉到这类错误,有其他办法吗?

最好网络不通时就能停止所有正在执行的代码?

--  作者:有点蓝
--  发布时间:2024/6/13 23:29:00
--  
已经执行的代码没有办法停止,除非是beforeShowErrorMessage出现网络错误就直接退出项目

正常beforeShowErrorMessage事件中仅使用 e.Cancel = True是不会再弹出错误的,如果确实还弹出是没有办法了。

5楼的提示窗口会不会是Forms("网络提示")这个窗口?

--  作者:HappyFt
--  发布时间:2024/6/14 14:24:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20240613220011.png
图片点击可在新窗口打开查看

网络提示的窗口是像上面这样的,我是用3楼的代码当网络断开时打开网络提示窗口,在此窗口的关闭前又设置了检测网络的代码,如果不点直接退出用户就无法关闭这个窗口

5楼的窗口是打开付款单时afterload中要加载表结构进来运行的代码出的错,如:
Select a.*, (select top 1 科目名称 from bugetAcc x0 where a.科目代码 = x0.科目代码) As 科目名称 from 付款单 a where a.[_Identify] = 0

现在的问题是用户操作中可能突然网络断开了,然后就弹出上面的网络提示窗口,一直到网络又恢复时自动关闭网络提示窗口后
又会执行网络断开前还没有执行完成的代码,这样就弹出一堆的错误窗口了


--  作者:有点蓝
--  发布时间:2024/6/14 14:50:00
--  
这个没有办法
--  作者:HappyFt
--  发布时间:2024/6/14 16:34:00
--  
没有办法当网络断开出现第一个错误弹出网络提示窗后就终止后面还没有执行完成的代码吗?
不然用户感觉这样体验很不好!当然如果点击直接退出是没有这个问题

--  作者:有点蓝
--  发布时间:2024/6/14 16:41:00
--  
已经在执行的代码是无法终止的。除非强制退出