以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- sql数据源设置问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=177173) |
-- 作者:bailing -- 发布时间:2022/5/11 17:46:00 -- sql数据源设置问题 前提:服务器有多个ip,设置ConnectionString里面的ip默认是192.168.0.150; 在打开项目的时候, project有个ip的txt文件,如果文件有内容(我电脑上的时192.168.1.150),则用文件里面的ip替换掉192.168.0.150; 如果没有则换192.168.1.150以及192.168.111.150尝试连接 我这个项目在打开的时候能正常连接,加载数据,但是在开发界面>>外部数据表,管理外部数据表的时候提示无法连接, 查看设置的ConnectionString仍然是192.168.0.150,然后报错如下,我该怎么解决 ps:更新版本前好像没有遇到这样的问题 |
-- 作者:有点蓝 -- 发布时间:2022/5/12 8:27:00 -- 数据源设置的代码发上来看看 |
-- 作者:bailing -- 发布时间:2022/5/12 9:17:00 -- BeforeConnectOuterDataSource事件代码 Dim ipFile As String = e.ProjectPath & "ip.txt" If e.Name = "foxtable人事数据库" OrElse e.name = "foxtable" OrElse e.name = "mirror" Then Dim ip As String = FileSys.ReadAllText(ipFile) If ip <> "" Then e.ConnectionString = e.ConnectionString.Replace("192.168.0.150",ip) Else If Connections.TryConnect(e.ConnectionString) Then \'如果第一个IP接通 filesys.WriteAllText(e.projectpath & "ip.txt","192.168.0.150",False) Else If Connections.TryConnect(e.ConnectionString.Replace("192.168.0.156", "192.168.1.150")) Then \'如果第一个IP接通 filesys.WriteAllText(e.projectpath & "ip.txt","192.168.1.150",False) e.ConnectionString = e.ConnectionString.Replace("192.168.0.150","192.168.1.150") Else If Connections.TryConnect(e.ConnectionString.Replace("192.168.0.150", "192.168.111.150")) Then filesys.WriteAllText(e.projectpath & "ip.txt","192.168.111.150",False) e.ConnectionString = e.ConnectionString.Replace("192.168.0.150","192.168.111.150") End If End If 连接字符串: Provider=SQLOLEDB.1;Password=********;Persist Security Info=True;User ID=fox_user;Initial Catalog=mirror;Data Source=192.168.0.150
|
-- 作者:有点蓝 -- 发布时间:2022/5/12 9:50:00 -- 试试。测试通过后自己去掉调试代码,如果不通,把调试结果发上来看看 Dim ipFile As String = e.ProjectPath & "ip.txt" If e.Name = "foxtable人事数据库" OrElse e.name = "foxtable" OrElse e.name = "mirror" Then MsgBox("数据源=" & e.Name) Dim ip As String Dim lst As New List(Of String) lst.AddRange({"", "192.168.0.150", "192.168.1.150", "192.168.111.150"}) If Filesys.FileExists(ipFile) Then ip = FileSys.ReadAllText(ipFile) lst(0) = ip MsgBox("文件记录的是" & ip) End If Dim cs As String = e.ConnectionString For Each s As String In lst If s > "" Then Dim s1 As String = cs.Replace("192.168.0.150", s) MsgBox("测试连接:" & s) If Connections.TryConnect(s1) Then e.ConnectionString = s1 filesys.WriteAllText(e.projectpath & "ip.txt", s, False) MsgBox("连接成功:" & s) Exit For End If End If Next End If |
-- 作者:bailing -- 发布时间:2022/5/12 10:03:00 -- 老师,您给的代码测试能通,能正常进入项目且加载数据,但是在开发界面>>外部数据表,管理外部数据表的时候报一样的错误 |
-- 作者:bailing -- 发布时间:2022/5/12 10:24:00 -- 虽然管理外部数据表的时候报错,但是能正常执行sql |
-- 作者:有点蓝 -- 发布时间:2022/5/12 10:29:00 -- 菜单里的数据源是不会变的,只会显示初始的设置,不会根据代码的设置变化的 |
-- 作者:bailing -- 发布时间:2022/5/12 10:31:00 -- 刚才用正确的ip添加了一个新的数据源,管理外部表窗口的时候,选择其他数据源还是会报错,但是选择这个含正确ip的就不会 |
-- 作者:有点蓝 -- 发布时间:2022/5/12 10:36:00 -- 仔细理解一下7楼。 |
-- 作者:bailing -- 发布时间:2022/5/12 10:49:00 -- 那我在使用外部数据源/管理外部表的时候,得把连接字符串改掉? |