设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4240|回复: 10
打印 上一主题 下一主题

[模块/函数] VPN中怎样检测服务器是否在线

[复制链接]
跳转到指定楼层
1#
发表于 2012-3-16 14:29:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zyp 于 2012-3-16 14:31 编辑

大家好!

用VPN(软件实现)做一个远程数据传输, 就是分公司上传一些数据给总公司的服务器. 用ADO来连接总公司的服务器,代码大致如下:

Public sub SerCK()
On Error GoTo LinkErr
    Dim CN As New ADODB.Connection
    CN.ConnectionString = "DRIVER=SQL SERVER;SERVER=192.168.2.2;UID=abc; PWD=000;DATABASE=test"
    CN.Open
    CN.Execute ("UPDATE ........")   
    CN.Close
    Set CN = Nothing
LinkExit:
    Exit sub
LinkErr:
    MsgBox Err.Number & "    " & Err.Description
    Resume LinkExit
End Function

当总公司服务器的SQL在线时, 程序可以正常执行;

但是, 当总公司服务器的SQL不在线时, 程序会在很长时间(30~60秒)才会做出反应, 提示无法连接;

有没有什么方法可以较为快速的检测出总公司服务器的SQL是否在线?

或者检测出公司的服务器是否与本机正常连接(用IP或用电脑名称都可以)?   因为SQL Server一般都是随机启动的, 而且总公司内部网也要用到它, 所以它一般都是在线的, 只要检测出服务器能够与本机正常通讯也就达到目的了.

谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2012-3-17 21:15:58 | 只看该作者
请问哪位朋友有做过这方面处理的,  指点一下!

谢谢!
3#
发表于 2012-3-21 16:12:18 | 只看该作者
cn.timeout=一个较小的数值,没有响应的时间 会变短。
可以用 错误处理 来捕获 是否连接到 sql 服务器。
4#
 楼主| 发表于 2012-3-22 12:51:26 | 只看该作者
wu8313 发表于 2012-3-21 16:12
cn.timeout=一个较小的数值,没有响应的时间 会变短。
可以用 错误处理 来捕获 是否连接到 sql 服务器。

谢谢Wu8313

我按你的方法试了一下, 发现没有timeout, 只有一个ConnectionTimeout
我写了一个简单的程序测试:

Public Sub A123()
    Dim CN As New ADODB.Connection
    CN.ConnectionString = "DRIVER=SQL SERVER;SERVER=192.168.2.2;UID=abc; PWD=000;DATABASE=test"
    CN.ConnectionTimeout = 2
    CN.Open
    CN.Close
    Set CN = Nothing
End Sub

然后用立即窗口进行测试, 发现不论CN.ConnectionTimeout 设为多少, 运行后到提示连接失败的时间差不多都是一样, 没有任何的区别.

不知是不是我哪里写提不对.

谢谢!
5#
 楼主| 发表于 2012-3-23 18:40:49 | 只看该作者
wu8313 发表于 2012-3-22 18:03
这个timeout 好像是没有效果,一直都这样设,没有关注过效果如何。
帮助却写得很明确,郁闷。

我测试了多种可能:
(1)主机没有开机或在线, 则ConnectionTimeout设为多少,都没有作用;
(2)主机有开机, 但SQL Server没有运行, 则ConnectionTimeout设定值就有用;
(3)主机有开机且SQL Server有运行, 但要连接的数据库不存在, 设没设ConnectionTimeout这个都无所谓, 因为立刻就可以产生错误了.

可是我主要测试的是就是第(1)种可能, 因为是VPN远程连接, VPN是用软件实现的那种, 不是很稳, 而且有时客户端的用户也会忘了先连VPN再执行相关的数据传输.

所以ConnectionTimeout在这里就用不到. 不过还是要谢谢wu8313, 这个方法以后肯定用得到.
6#
 楼主| 发表于 2012-3-23 18:44:11 | 只看该作者
todaynew 发表于 2012-3-22 19:37
设个计时器,到时间连不上就断开。

这个想法好.

但是我却不知道加在哪里, 要如何写代码.

版主可以再提示一下吗? 谢谢!
7#
 楼主| 发表于 2012-3-23 18:48:10 | 只看该作者
谢谢 风中漫步 的提醒!

虽然是用VPN, 但是网络是正常的, 连上服务器基本上用不到2秒, 我也用过10秒/20秒/30秒试过, 其结果都一样, 只是服务器不在线, 提示连接错误的时间都差不多, 45~55秒才会提示连接错误
8#
发表于 2012-3-22 18:03:56 | 只看该作者
这个timeout 好像是没有效果,一直都这样设,没有关注过效果如何。
帮助却写得很明确,郁闷。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
9#
发表于 2012-3-22 19:37:45 | 只看该作者
zyp 发表于 2012-3-22 12:51
谢谢Wu8313

我按你的方法试了一下, 发现没有timeout, 只有一个ConnectionTimeout

设个计时器,到时间连不上就断开。

点评

呵呵,断开稍微超前了些,还没连上呢 :)  发表于 2012-3-23 17:05
10#
发表于 2012-3-24 13:13:22 | 只看该作者
我的理解是:你需要一段代码,用于测试目标服务器是否在线,且返回时间要短,是否ADO不重要.现成的代码没有,给你几个建议

1 引用你电脑中最高版本的ADO试ConnectionTimeout,可行否
2 没记错的话,有位戴墨镜头像的斑竹曾发过一个检测局羽网某台计算机是否在线的函数,没看错的话用的是WMI,WIN2000及以上都可以执行,建议你试试.代码很少,用来换速度还是值的
3 曾记得ACCESS911有篇在线升级的文章,其中的一些方法建议试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-1 09:21 , Processed in 0.102438 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表