VBA 获取计算机 *** 状态
Posted
技术标签:
【中文标题】VBA 获取计算机 *** 状态【英文标题】:VBA to get Computers *** State 【发布时间】:2014-09-29 08:54:52 【问题描述】:我正在尝试在我的代码中构建一种查看计算机是否可以访问它所访问的 SQL Server 的方法。
问题是我不能只获取网络状态,以访问计算机需要在 *** 上的 SQL Server(通过 Cisco)
我在 VBA 中看到了 Cisco API 参考,但不知道如何使用它,也不能 100% 确定这是一种故障安全的测试方法
我有两个想法:
-
Ping SQL Server(我的首选)- 我尝试过使用此代码,但无论服务器是否连接,它都会返回“通过”
我的功能:
Sub test()
' SQL Server address instead of xxxxxxx
If Ping("xxxxxxx") Then
MsgBox "Passed", vbOKOnly
Else
MsgBox "Failed", vbOKOnly
End If
End Sub
Public Function Ping(ByVal ComputerIP As String) As Boolean
'You can use also name of computer
' Return TRUE, if pin was successful
Dim oPingResult As Variant
For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerName & "'")
If IsObject(oPingResult) Then
If oPingResult.StatusCode = 0 Then
Ping = True
'Debug.Print "ResponseTime", oPingResult.ResponseTime 'You can also return ping time
Exit Function
End If
End If
Next
End Function
-
我的另一个想法是,如果计算机连接到 ***,以太网 LAN 适配器会更改为具有特定于连接的 DNS 后缀(但我认为这是一个虚拟适配器,所以我不能只测试名称,因为它可能不会在重复测试中使用同一个适配器)
因此我的第二个想法是扫描所有连接以检索其特定于连接的 dns 后缀并测试正确的名称,但是我不确定如何提取此信息。
【问题讨论】:
您的问题标题似乎与您实际提出的问题有点不同。您是在问是否可以测试 SQL Server 连接,或者如何确定是否连接了特定的网络适配器。 (对于第一种情况,只需尝试连接到服务器,如果可以,则可以,如果不能,则不能)。 在我工作的地方,我们使用安全的网络连接(无论是在 *** 还是 LAN 上)我需要工作簿来获取此信息以查看它是否可以连接到 SQL 服务器。如果是这样,代码将继续。如果不是,它将运行其他东西,以便以不同方式使用工作簿。我需要对此进行测试,并且我不希望代码等到超时。 好的,所以您的问题与 SQL Server 无关。仅供参考,在您的情况下正确的做法是在使用点尝试连接,然后处理失败。当您删除一个文件时,您不会考虑删除可能出错的所有可能方式,并在执行删除之前对其进行测试;您只需删除文件并在失败时处理异常。第一种方法会导致竞争条件并且不能保证成功。如果可能,第二个保证成功。 【参考方案1】:已经修复了上面的代码 - 刚刚意识到我调用了错误的变量来 ping。
应该是:
Sub test()
' SQL Server address instead of xxxxxxx
If Ping("xxxxxxx") Then
MsgBox "Passed", vbOKOnly
Else
MsgBox "Failed", vbOKOnly
End If
End Sub
Public Function Ping(ByVal ComputerIP As String) As Boolean
'You can use also name of computer
' Return TRUE, if pin was successful
Dim oPingResult As Variant
For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerIP & "'")
If IsObject(oPingResult) Then
If oPingResult.StatusCode = 0 Then
Ping = True
'Debug.Print "ResponseTime", oPingResult.ResponseTime 'You can also return ping time
Exit Function
End If
End If
Next
End Function
现在可以使用
【讨论】:
以上是关于VBA 获取计算机 *** 状态的主要内容,如果未能解决你的问题,请参考以下文章