BeforeConnectOuterDataSource
这个事件是专业用户才用得着的,普通用户不需要研究它。
准备连接外部数据源的时候执行,可以在此修改连接字符串。
e参数属性:
Name:
外部数据源名称
User: 登录用户
ProjectFile:
项目文件名,含路径。
ProjectPath: 返回项目文件所在目录
ConnectionString: 返回或设置连接字符串。
HideSplashForm: 逻辑型,设为True,关闭Foxtable的启动封面。
有两点要注意:
Foxtable使用的数据提供程序是OLE DB .NET。
数据源最好是SQL SERVER 或者 ACCESS。
e参数方法:
EditConnectionString:手工连接数据源。
这也是唯一一个带方法的e参数。
利用本事件,可以根据登录用户的不同,通过修改e参数的ConnectionString属性,链接到不同的后台数据库。
注意此事件必须通过e.User来引用用户。
示例一
假定有一个成绩管理系统,使用的是一个Access格式的外部数据源,外部数据源的名称为“成绩”,外部数据文件名为"成绩数据.mdb",和项目文件处于同一目录之下。
为了保证这个项目复制到任何目录都能正常链接该外部数据源,可以在BeforeConnectOuterDataSource事件中加入下面的代码:
If
e.name = "成绩"
Then
e.ConnectionString
= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
& e.ProjectPath
&
"成绩数据.mdb;Persist Security Info=False"
End
if
这里假定外部数据源的格式2000/2003,如果是2007,代码为:
If
e.name = "成绩"
Then
e.ConnectionString =
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
& e.ProjectPath
&
"成绩数据.accdb;Persist Security Info=False"
End
if
如果有多个数据源,可以:
If
e.name = "数据源1"
Then
e.ConnectionString
= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
& e.ProjectPath
&
"数据文件1.mdb;Persist Security Info=False"
ElseIf
e.name = "数据源2"
Then
e.ConnectionString
= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
& e.ProjectPath
&
"数据文件2.mdb;Persist Security Info=False"
End
if
示例二
假定你有三个外部数据文件,分别是:2008.MDB、2009.MDB、2010.MDB,希望能够让用户在登录的时候,选择链接这三个数据库之一。
为解决这个问题,可以在用户管理窗口增加一个名为“数据库”的扩展用户属性,将这个扩展属性的候选值设为“|2008|2009|2010”:
然后在BeforeConnectOuterDataSource事件中加入下面的代码:
If
e.name = "连接名称"
Then
e.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
& e.ProjectPath
& e.User.ExtendedValues("数据库")
& ".mdb;Persist Security Info=False"
End
if
这样用户在登录的时候,不仅可以从下拉列表中选择数据库,还可以直接输入数据库名称。
示例三
如果希望能够在打开项目的时候,自动出现一个对话框,让用户可以自由选择外部数据文件,可以在BeforeConnectOuterDataSource事件中加入下面的代码:
If
e.Name = "连接名称" Then示例四
假定有一个名为“销售数据”远程数据源,默认的IP地址为119.119.120.120,因为服务器的调整,IP地址可能会发生变化,导致数据源无法连接。
为解决这个问题,可以在用户管理窗口增加一个名为IP的扩展用户属性,让用户在登录的时候,可以输入另一个IP地址,然后在BeforeConnectOuterDataSource事件中加入下面的代码:
If
e.Name = "销售数据" Then你也可以用另一种方法解决,在项目文件目录下创建一个ip.txt的文本文件,在该文件中输入最新的IP地址,并在BeforeConnectOuterDataSource事件中设置如下代码:
Dim
ipFile As
String = e.ProjectPath
&
"ip.txt"
If
e.Name =
"销售数据" Then
If Filesys.FileExists(ipFile)
Then
Dim
ip As
String = FileSys.ReadAllText(ipFile)
e.ConnectionString
= e.ConnectionString.Replace("119.119.120.120",ip)
End
If
End
If
示例五
假定有两个IP地址(也可能是两个服务器),分别是192.168.1.100和119.75.217.56,默认使用第一个IP地址,如果第一个IP地址无法接通,则自动切换到第二个IP地址。
要实现这个功能很简单,首先在设置数据源的时候,使用第一个IP地址(192.168.1.100)设置,然后在BeforeConnectOuterDataSource事件中设置如下代码:
If
e.Name =
"数据源名称" Then
If Network.Ping("192.168.1.100",1000)
= False
Then '如果第一个IP无法接通
e.ConnectionString
= e.ConnectionString.Replace("192.168.1.100",
"119.75.217.56")
End If
End
If
示例六
你也可以在连接某一数据源之前,执行方法EditConnectionString,让用户手工设置连接字符串。
例如你希望在连接“销售数据”的时候,如果登录用户为开发者,则显示数据连接窗口,让用户手动选择外部数据源:
If
e.User.Type = UserTypeEnum.Developer Then