Foxtable(狐表)用户栏目专家坐堂 → 外部数据源的连接问题


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

主题:外部数据源的连接问题

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
外部数据源的连接问题  发帖心情 Post By:2015/9/13 11:14:00 [显示全部帖子]

我设计的项目中,用到了外部数据源,当网络不通的时候启动会出现下列窗口

 


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

 



图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看

问题:

1、项目使用时总有外部数据源链接不通的时候,能否在启动时如果发现连接不通就不再连接,而不出现上述图标,直接弹出一个窗口说明一下,免得使用者不懂什么意思,也不知道如何处理

 

2、外部数据连接不通后,能否返回一个结果,或者给自定义的全局变量赋值,这样在某个窗体中根据这个值给使用者一个提示:【外部数据暂时无法连接】或【外部数据连接正常】

 

3、启动项目时,若外部数据无法连接,然后在启动项目后,可否间隔一端时间自动连接一次,一边刷新上述第二条中提到的全局变量。

 

敬请高手指导!

[此贴子已经被作者于2015/9/13 11:15:54编辑过]

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/11/15 18:55:00 [显示全部帖子]

我在运行程序时,为了防止普通用户在 外部数据源无法连通时,系统就没法运行的情况,写了如下代码:

'--- 准备连接外部数据源的时候,先测试数据源是否连通
Dim s As String = " Provider=SQLOLEDB.1;Password=。。。。。。。。。。。。"
If Connections.TryConnect(s) = False Then
    MessageBox.Show("数据源无法连通!")
    Connections.Delete("外部数据源名称")
Else
    MessageBox.Show("数据源连通!")
End If

我想,既然无法连通,就删除建立的外部数据源名称,但红色的命令是无效的,这是为什么呢?
说明书上可写的是:

     语法:

     Delete(Name)

     Name   要删除的数据源名称。


[此贴子已经被作者于2015/11/15 19:03:58编辑过]

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/11/15 23:00:00 [显示全部帖子]

1、网络数据源 
      外部数据源名称:网络教育  (文件名称:杏花教育.mdf)
      连接字符串:      Provider=SQLOLEDB.1;Password=******;Persist Security Info=True;User                                                                  ID=sa;Initial Catalog=杏花教育;Data Source=118.123.**.**

2、本地数据源 
     本地数据源名称: 本地教育  (文件名称:杏花教育.mdb)
     连接字符串:      Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
                            E:\狐表\金微教育\空外部数据\杏花教育.mdb;Persist Security Info=False

每个数据源里的三个表名(网络职工、网络事业、网络信息)都一样,结构一样,就是文件类型不同

请问 大红袍老师 ,如何写啊?我在BeforeConnectOuterDataSource属性里写了好几种都没成功(只要网络数据源没有连接,即使本地数据源连接成功了,在普通用户登录时就是 无法继续运行)

[此贴子已经被作者于2015/11/15 23:00:42编辑过]

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/11/16 11:05:00 [显示全部帖子]

以下三点都做到了,而且开机时测试正常
一、两个数据源: 1、网络数据源  2、本地数据源 
二、连接字符串分别为:  Provider=SQLOLEDB.1;Password=******;Persist Security Info=True;User                                                                                          ID=sa;Initial Catalog=杏花教育;Data Source=118.123.**.**

                                Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
                                                 E:\狐表\金微教育\空外部数据\杏花教育.mdb;Persist Security Info=False
三、每个数据源里的三个表名(网络职工、网络事业、网络信息)都一样,结构一样,就是文件类型不同

四、BeforeConnectOuterDataSource属性里写了如下代码:
   Dim s1 As String = " Provider=SQLOLEDB.1;Password=******;Persist Security Info=True;User                                                           ID=sa;Initial Catalog=杏花教育;Data Source=118.123.**.** "
   If Connections.TryConnect(s1) = False Then
     MessageBox.Show("网络SQL数据源无法连通!")
    Else
       MessageBox.Show("网络SQL数据源连通!")
    End If
  Dim s2 As String = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
                               E:\狐表\金微教育\空外部数据\杏花教育.mdb;Persist Security Info=False "
  If Connections.TryConnect(s2) = False Then
     MessageBox.Show("本地acc数据源无法连通!")
   Else
     MessageBox.Show("本地acc数据源连通!")
                End If
    运行结果都是【连通】
现在是如何写代码,在网络不通无法连接服务器的时候,转成本地数据源而不会提出出错信息后关闭呢?外部数据源里可是建好了两个外部数据源了啊!
能不能添加 :
Dim s1 As String = " Provider=SQLOLEDB.1;Password=。。。。。。教育;Data Source=118.123.10.25 "
If Connections.TryConnect(s1) = False Then
    MessageBox.Show("主数据源无法连通!改本地数据源")
    e.name = "本地杏花教育" 
     e.Ccolor: rgb(128, 0, 128); font-family: calibri; font-size: 14px; font-style: normal; font-variant: normal; font-weight: bold; line-height: 21px; list-style: none;" 0px"="" auto;="" padding:="" 0px;"="">Else
    MessageBox.Show("主数据源连通!")
End If
[此贴子已经被作者于2015/11/16 11:48:15编辑过]

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/11/16 15:08:00 [显示全部帖子]

谢谢啦!谢谢大红袍老师,还有两个 小问题:

1、E:\狐表\金微教育\空外部数据\杏花教育.mdb   因为就是单机使用,所以可不可以写成相对路径啊(我写成了ProjectPath &"\空外部数据\杏花教育.mdb),因为这样如果不改的话,换个电脑后,数据文件一定限制在这个位置了。

2、我想设置一个全局变量【网络数据源连接】,根据数据库的连接情况得到一个数0,1,2。。。,为以后是否可以向网络数据源写入文件,但是BeforeConnectOuterDataSource属性中的代码运行时没有发现全局变量的,以后用个什么代码可以测试数据源的连接从而获得全局变量的值呢?

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/11/16 16:04:00 [显示全部帖子]

Dim s2 As String = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\狐表\金微教育\空外部数据\杏花教育.mdb;Persist Security Info=False "

改为 :
Dim s2 As String = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e.ProjectPath & “空外部数据\杏花教育.mdb”;Persist Security Info=False "

测试无法通过,问题出在  e.ProjectPath & “空外部数据\杏花教育.mdb”   的处理上呢!

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/11/16 16:28:00 [显示全部帖子]


1、这个问题已经解决了    2、可以public变量 http://www.foxtable.com/help/topics/1842.htm



2、这个写法还是无法测试通过:


Dim s2 As String = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & e.ProjectPath & “空外部数据\杏花教育.mdb;Persist Security Info=False "


我试了好几个写法都没有用,要不要先定义一个字符变量啊?


       定义 字符变量   S1

     S1 = e.ProjectPath & “空外部数据\杏花教育.mdb"


[此贴子已经被作者于2015/11/16 16:31:24编辑过]

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/11/16 17:24:00 [显示全部帖子]

"& e.ProjectPath &"空外部数  是正确的
我写成了 "& e.ProjectPath & "空外部数  ,多了个空格。

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/12/7 7:55:00 [显示全部帖子]

近来我把电脑断网的时候,运行程序 ,发现在检测和服务器数据库连接时比较耗时,我设想,能不能检测前 ping 一下常用的网址,比如 ping baidu.com,如果ping不通就直接返回了,但不知道代码怎么个写法,请老师指教!

Dim s1 As String = " Provider=SQLOLEDB.1;Password=。。。。。。教育;Data Source=118.123.10.2 "
if                                          then     ‘如果ping 一下 www.baidu.com 不通
      网络数据源连通 = 0             '网络数据源连通是全局变量
else
      If Connections.TryConnect(s1) = False Then
           MessageBox.Show("主数据源无法连通!改本地数据源")
             网络数据源连通 = 0
      else
             网络数据源连通 = 1
      End If
end if
[此贴子已经被作者于2015/12/7 8:02:22编辑过]

 回到顶部