Foxtable(狐表)用户栏目专家坐堂 → [求助]用户端正常工作时,如果服务器端突然断开无连接时的问题


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

主题:[求助]用户端正常工作时,如果服务器端突然断开无连接时的问题

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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
[求助]用户端正常工作时,如果服务器端突然断开无连接时的问题  发帖心情 Post By:2019/7/29 9:11:00 [只看该作者]

老师好。
        请教老师,在项目用户端正常工作或操作的时,项目服务器端突然断开(包括断电、关机、网络断路等)导致无连接时,导致项目用户端出现死机或假开机状况,项目程序停留在当前操作界面不能进行任何操作(鼠标点击窗口所有控件均无任何反映),点击项目的关闭按钮也退不出程序,最后只能用启动 “Win的任务管理器” 来强制退出和关闭项目程序。这种情况应如何处理?

        能不能在项目某处设置代码,在遇到项目服务器端突然断开(包括断电、关机、网络断路等)导致无连接情况时,能即时跳出一个提示窗口,来提醒客户端用户“与服务器的链接断开”,并且用二个按钮【关闭退出】、【继续等待】来操作项目程序,如果点击【关闭退出】按钮、则能关闭项目并退出;如果点击【继续等待】按钮,则等待恢复链接并在等待一段时间后再次跳出“与服务器的链接断开”的提示窗口让客户端用户选择操作动作

        谢谢。

[此贴子已经被作者于2019/7/30 10:19:18编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107751 积分:548094 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/29 10:25:00 [只看该作者]

参考:

NetworkAvailabilityChanged网络可用状态发生变化后执行。
NetworkAddressChanged网络IP地址发生变化后执行。

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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/7/30 9:58:00 [只看该作者]

老师好。局域网、SQL Server数据库,在项目“NetworkAddressChanged”事件写入如下代码,将服务器突然关机时,用户端不出现如下代码提示(代码不起作用)。

If TryConnectHost("192.168.152.102") = False Then    '如果服务器的地址不可以解析
    If Network.Ping("192.168.152.102") = False Then    '如果服务器不可以连接    
        Dim Result As DialogResult
        Result = MessageBox.Show("与服务器的链接已断开! 是否退出系统? 点击【确定】,关闭正在进行的工作并退出系统; 点击【取消】,则继续等待服务器恢复链接.", "运行错误", MessageBoxButtons.OKCancel, MessageBoxIcon.Error)
        If Result = DialogResult.OK Then
            MessageBox.Show("关闭项目退出","提示")
            Syscmd.Project.Exit() 
            Return
        Else
            MessageBox.Show("继续等待服务器恢复链接.","提示")
        End If
    End If
End If
[此贴子已经被作者于2019/7/30 10:09:39编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107751 积分:548094 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/30 10:29:00 [只看该作者]

嗯,看错了,这个是判断本机状态的,无法判断服务器状态

试试BeforeShowErrorMessage事件:
If e.Message2.indexof("一般性网络错误") > -1 Or e.Message2.indexof("SQL Server 不存在") > -1 Then
if vars("select") = false
    vars("select") = true
    Dim Result As DialogResult
    Result = MessageBox.Show("网络不通,点击是将退出,点击(否)继续等待网络正常后再操作!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    If Result = DialogResult.Yes Then
        Syscmd.Project.Exit(False)
    Else
        e.Cancel=True
        Return
    End If
end if
end if

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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/7/31 10:37:00 [只看该作者]

老师好。实现所需要的功能,但还存在一个问题,就是最后又出现一个系统错误提示如下图后才能退出项目程序。

此主题相关图片如下:002.png
按此在新窗口浏览图片

BeforeCloseProject事件有记录用户退出、及保存数据的代码如下:
Dim dtt As DataTable = DataTables("登录日志")
vars("行")("用户名") = _UserName
vars("行")("退出")= "退出系统"
vars("行")("退出日期时间")= Date.Now() 
dtt.save()

For Each dt As DataTable In DataTables  
    dt.save    
Next

请教老师,出现该错误提示是否要修正代码,如果只是提示作用,如何才能不让出现该系统错误提示。谢谢。
[此贴子已经被作者于2019/7/31 10:37:49编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107751 积分:548094 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/31 10:51:00 [只看该作者]

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=138424

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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/7/31 11:25:00 [只看该作者]

老师好。在 “第一行加上  if vars("行") is nothing then return” 这句代码后,仍然出现6楼的提示窗口。




 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107751 积分:548094 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/31 11:47:00 [只看该作者]

应该是save()的问题,因为数据库已经断开了

试试
BeforeShowErrorMessage事件:
If e.Message2.indexof("一般性网络错误") > -1 Or e.Message2.indexof("SQL Server 不存在") > -1 Then
if vars("select") = false
    vars("select") = true
    Dim Result As DialogResult
    Result = MessageBox.Show("网络不通,点击是将退出,点击(否)继续等待网络正常后再操作!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    If Result = DialogResult.Yes Then
vars("nosave") = true
        Syscmd.Project.Exit(False)
    Else
        e.Cancel=True
        Return
    End If
end if
end if

BeforeCloseProject事件
if vars("nosave") = true then return
Dim dtt As DataTable = DataTables("登录日志")
vars("行")("用户名") = _UserName
vars("行")("退出")= "退出系统"
vars("行")("退出日期时间")= Date.Now() 
dtt.save()

For Each dt As DataTable In DataTables  
    dt.save    
Next

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


加好友 发短信
等级:童狐 帖子:249 积分:1853 威望:0 精华:2 注册:2018/1/16 20:53:00
  发帖心情 Post By:2019/8/2 12:07:00 [只看该作者]

mark

 回到顶部