以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  局域网与外部网络访问数据库切换链接问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=170487)

--  作者:z769036165
--  发布时间:2021/7/28 11:13:00
--  局域网与外部网络访问数据库切换链接问题
需要实现,在局域网访问时候数据库链接使用内部局域网IP访问,在出差外网访问的时候,切换访问web数据源访问,在BeforeConnectOuterDataSource
设置以下代码,结果没作用
默认设置的数据库链接是采用的局域网内的连接,目前是判断这个链接不上,就换成这个WEB数据源访问
If TryConnectHost("192.168.3.10")  = False Then
    If Network.Ping("192.168.3.10",1000) = False Then \'如果第一个IP无法接通
        Select Case e.Name
            Case "shujk"
                Dim sb As New StringBuilder
                sb.AppendLine("http://222.168.xxx.xxx:8000/DataServer.htm")
                sb.AppendLine("-FormData-")
                sb.AppendLine("UserName:xxxxxx")
                sb.AppendLine("Password:xxxxxxxxxxx")
                e.ConnectionString = sb.ToString()
     End If
End If

--  作者:有点蓝
--  发布时间:2021/7/28 11:29:00
--  
提示什么错误,新建一个项目,直接连接这个web数据源有没有问题?

调试看看

If TryConnectHost("192.168.3.10")  = False Then
msgbox(1)
    If Network.Ping("192.168.3.10",1000) = False Then \'如果第一个IP无法接通
msgbox(e.Name)
        Select Case e.Name
            Case "shujk"
                Dim sb As New StringBuilder
                sb.AppendLine("http://222.168.xxx.xxx:8000/DataServer.htm")
                sb.AppendLine("-FormData-")
                sb.AppendLine("UserName:xxxxxx")
                sb.AppendLine("Password:xxxxxxxxxxx")
                e.ConnectionString = sb.ToString()
msgbox(e.ConnectionString)
     End If
End If

--  作者:z769036165
--  发布时间:2021/7/28 18:16:00
--  
---------------------------
错误
---------------------------
创建外部连接"shujk"失败,请联系管理员或开发者,重新设置数据链接字符串!
---------------------------
确定   
---------------------------
直接显示这个没弹出内容

--  作者:有点蓝
--  发布时间:2021/7/29 8:37:00
--  
新建一个项目,直接连接这个web数据源有没有问题?
--  作者:z769036165
--  发布时间:2021/7/29 11:10:00
--  
直接连接没有问题,现在好像问题在BeforeConnectOuterDataSource这个地方,没有先做判断,而是先进行了局域网的数据库连接,然后连接不上局域网数据库报错,报错后才出现msgbox(1)、msgbox(e.Name)弹窗
--  作者:有点蓝
--  发布时间:2021/7/29 11:14:00
--  
是不是设置了多个数据源?

去掉这个判断试试:If TryConnectHost("192.168.3.10")  = False Then

--  作者:z769036165
--  发布时间:2021/7/29 11:20:00
--  
If TryConnectHost("192.168.3.10")  = False Then
msgbox(1)
    If Network.Ping("192.168.3.10",1000) = False Then \'如果第一个IP无法接通
msgbox(e.Name)
        Select Case e.Name
            Case "shujk"
                Dim sb As New StringBuilder
                .....
     Case  "另外一个"
......
msgbox(e.ConnectionString)
     End If
End If
有2个,另外一个也包在里面了,之前If TryConnectHost("192.168.3.10")  = False Then没有加的,就是不行,所以以为是Network.Ping没判断出来,加了这个

--  作者:有点蓝
--  发布时间:2021/7/29 11:35:00
--  
换种方式判断:http://www.foxtable.com/webhelp/topics/1944.htm

Dim ErrMsg As String
If Connections.TryConnect(e.ConnectionString,ErrMsg) = False Then
     Select Case e.Name
            Case "shujk"
                Dim sb As New StringBuilder
                .....
     Case  "另外一个"
......

End If

--  作者:z769036165
--  发布时间:2021/7/29 14:05:00
--  
e.Connec ti,不加判断条件
直接这样修改都不行,我怀疑是web数据源与正常的sql数据源切换有问题

我设置当前数据源shujk  为web数据源,正常能连接
BeforeConnectOuterDataSource里只设置

e.C onnec tionStr ing = "Pr ovid er=SQ LOLEDB.1;Pa ssword=xxxx;P ersist Sec urity Info=True;U ser ID=sa;Initial C atalog=xxxx;Dat a Source=xxx x"

进去后数据库就没改过来还是原来的,反过来也是一样的
[此贴子已经被作者于2021/7/29 14:06:58编辑过]

--  作者:有点蓝
--  发布时间:2021/7/29 14:09:00
--  
肯定是改了的,只不过这个代码并不会影响菜单里原数据源的设置。直接在数据源里是看不出来的。

我测试改为web数据源是可以的。或者做个例子发过来测试