Foxtable(狐表)用户栏目专家坐堂 → 开发版项目的外部数据源问题


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

主题:开发版项目的外部数据源问题

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


加好友 发短信
等级:小狐 帖子:369 积分:2911 威望:0 精华:0 注册:2009/4/1 12:51:00
开发版项目的外部数据源问题  发帖心情 Post By:2010/1/25 20:53:00 [只看该作者]

在电脑a上用开发版发布的项目,外部数据源的路径设为d:....,然后发布项目,把项目拷贝到另一台电脑b上,把外部数据源设为a电脑上的数据源,这时无法保存重新设定的数据源,项目打开一次,就要重新设定数据源。 是不是bug,还是哪里没有设定好?

另发布的项目用开发者登陆还是无法设计代码是什么原因?



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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2010/1/25 21:07:00 [只看该作者]

您的路子好像有问题。
1、将数据源路径写入.text文本文件保存备用。
2、项目属性的BeforeConnectOuterDataSource事件中设置代码调用并创建连接。

类似的方法很多:

BeforeConnectOuterDataSource

这个事件是专业用户才用得着的,普通用户不需要研究它。
准备连接外部数据源的时候执行,可以在此修改连接字符串。

e参数属性:

Name:             外部数据源名称
User:             登录用户
ProjectFile:      项目文件名,含路径。
ProjectPath:      返回项目文件所在目录
ConnectionString: 返回或设置连接字符串。

有两点要注意:

FoxTable使用的数据提供程序是OLE DB .NET。
数据源最好是SQL SERVER 或者 ACCESS。

e参数方法:

EditConnectionString:手工连接数据源。

这也是唯一一个带方法的e参数。

利用本事件,可以根据登录用户的不同,通过修改e参数的ConnectionString属性,链接到不同的后台数据库。

示例一

假定有一个成绩管理系统,使用的是一个Access格式的外部数据源,外部数据源的名称为“成绩”,外部数据文件名为"成绩数据.mdb",和项目文件处于同一目录之下。
为了保证这个项目复制到任何目录都能正常链接该外部数据源,可以在
BeforeConnectOuterDataSource事件中加入下面的代码:

If e.name = "成绩" Then
    e.C & e.ProjectPath &
"成绩数据.mdb;Persist Security Info=False"
End
if

这里假定外部数据源的格式2000/2003,如果是2007,代码为:

If e.name = "成绩" Then
    e.C & e.ProjectPath &
"成绩数据.mdb;Persist Security Info=False"
End
if

示例二

假定你有三个外部数据文件,分别是:2008.MDB、2009.MDB、2010.MDB,希望能够让用户在登录的时候,选择链接这三个数据库之一。
为解决这个问题,可以在用户管理窗口增加一个名为“数据库”的扩展用户属性,将这个扩展属性的候选值设为“|2008|2009|2010”:

然后BeforeConnectOuterDataSource事件中加入下面的代码:

If e.name = "连接名称" Then
    e.C & e.ProjectPath &
e.User.ExtendedValues("数据库") & ".mdb;Persist Security Info=False"
End
if

这样用户在登录的时候,不仅可以从下拉列表中选择数据库,还可以直接输入数据库名称。

示例三

如果希望能够在打开项目的时候,自动出现一个对话框,让用户随意选择外输数据文件链接,可以BeforeConnectOuterDataSource事件中加入下面的代码:

If e.Name = "连接名称" Then
    Dim
dlg As New OpenFileDialog
    dlg.Filter=
"Access文件|*.mdb"
    If dlg.ShowDialog = DialogResult.Ok Then
        e.ConnectionString =
"Provider=
Microsoft.Jet.OLEDB.4.0;Data Source=" & dlg.FileName & ";Persist Security Info=False"
    End
If
End
if

示例四

假定有一个名为“销售数据”远程数据源,默认的IP地址为119.119.120.120,因为服务器的调整,IP地址可能会发生变化,导致数据源无法连接。
为解决这个问题,可以在用户管理窗口增加一个名为IP的扩展用户属性,让用户在登录的时候,可以输入另一个IP地址,
然后BeforeConnectOuterDataSource事件中加入下面的代码:

If e.Name = "销售数据" Then
    Dim
IP As String = e.User.ExtendedValues("IP") '获得用户输入的IP
   
If IP > "" '如果用户自己输入了IP
        '则用用户输入的IP替换原来的IP

        e.ConnectionString = e.ConnectionString.Replace(
"119.119.120.120", IP)
    End
If
End
If

你也可以用另一种方法解决,在项目文件目录下创建一个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

示例五

你也可以在连接某一数据源之前,执行方法EditConnectionString,让用户手工设置连接字符串。
例如你希望在连接“销售数据”的时候,如果登录用户为开发者,则显示数据连接窗口,让用户手动选择外部数据源:

If e.User.Type = UserTypeEnum.Developer Then
    e.EditConnectionString()

End
If


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


加好友 发短信
等级:小狐 帖子:369 积分:2911 威望:0 精华:0 注册:2009/4/1 12:51:00
  发帖心情 Post By:2010/1/26 14:30:00 [只看该作者]

谢谢程版,试了很多次,还是不行
我是用例四的ip.txt代码,有点看不懂这个代码
Dim ipFile As String = e.ProjectPath & "ip.txt"
If e.Name = "wanj" Then
    If Filesys.FileExists(ipFile) Then
        Dim ip As String = FileSys.ReadAllText(ipFile)
        e.ConnectionString = e.ConnectionString.Replace("192.168.1.111",ip)
    End If
End If

主机的数据库文件该放在哪里?
麻烦再看下问题出在哪里 谢谢。





 回到顶部