Foxtable(狐表)用户栏目专家坐堂 → 使用外部数据源时,动态加载数据的例子


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

主题:使用外部数据源时,动态加载数据的例子

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
使用外部数据源时,动态加载数据的例子  发帖心情 Post By:2009/3/17 0:03:00 [只看该作者]

这是使用外部数据源进行动态加载的例子:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.rar


 

为测试方便,使用的是Aceess数据库作为数据源。

如果使用Sql Server,只需删除BeforeConnectOuterDataSource事件中的代码即可。


[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
gaoqr
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:353 积分:3058 威望:0 精华:0 注册:2008/9/1 6:39:00
  发帖心情 Post By:2009/3/17 7:19:00 [只看该作者]

正需要,学习!

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


加好友 发短信
等级:一尾狐 帖子:431 积分:2808 威望:0 精华:0 注册:2008/9/1 8:46:00
  发帖心情 Post By:2009/3/17 8:17:00 [只看该作者]

     初学调用外部数据源,请问一下在BeforeLoadOuterTable事件中:

If e.DataTableName = "订单" Then
    e.SelectString = "Select * From 订单 Where 编号 < 0"
End If

     加载数据源的条件为什么是:Where 编号 < 0  。看表数据中并没有编号小于O的记录。难道在此仅仅是加裁空表,然后再目录树中再真正加裁数据吗?  

     请高人指点一二,谢谢了! 

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/17 9:15:00 [只看该作者]

目录树也没有真正加载数据,因为目录树的Select语句用了Distinct关键词,这样只是获得不重复的产品和和户名称,这个数据量是极小的。

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


加好友 发短信
等级:小狐 帖子:353 积分:3058 威望:0 精华:0 注册:2008/9/1 6:39:00
  发帖心情 Post By:2009/3/17 11:13:00 [只看该作者]

我本想把所有定额(25个表)放到外部数据中,没有成功。

数据加载为一条一条的加载(输入 定额编号 后,在所属 定额 中查找这个 定额编号 的 材料编号 和 定额用量 )

BeforeConnectOuterDataSource 如下:

If e.Name = "gaoqr"
  e.C & e.ProjectPath & "工程.mdb;Persist Security Info=False"
End If

BeforeLoadOuterTable 不会设置。(定额 是变量 25个表名,不知怎样改动)

If e.DataTableName = "实体预算书" Then
    e.SelectString = "Select * From 定额 Where 定额编号 < 0"
End If


请高人指点。

内部表原代码 DataColChanged 如下,通过。

                For Each dr2 As DataRow In DataTables(c("定额")).Select("定额编号 = '" & c("定额编号") &  "'")
                Dim r3 As Row = Tables(b("关联表")).AddNew
                r3("序号1") = c("序号1")
                r3("材料编号") = dr2("材料编号")
                r3("定额用量") = dr2("定额用量")
            Next

修改如下:
            Dim de As String = c("定额")
            Dim bh As String = c("定额编号")
            Dim cmd As New SQLCommand
            Dim dt As DataTable
            cmd.C
            cmd.CommandText = "SELECT DISTINCT 材料编号,定额用量 From de WHERE 定额编号 = bh "
            dt = cmd.ExecuteReader()
            For Each dr2 As DataRow In DataTables(dt)
                Dim r3 As Row = Tables(b("关联表")).AddNew
                r3("序号1") = c("序号1")
                r3("材料编号") = dr2("材料编号")
                r3("定额用量") = dr2("定额用量")
            Next

出现错误提示



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

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/17 11:24:00 [只看该作者]

哈哈,错误提示已经告诉你了啊:

For each dr2 as datarow in dt.DataRows
Next

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


加好友 发短信
等级:小狐 帖子:353 积分:3058 威望:0 精华:0 注册:2008/9/1 6:39:00
  发帖心情 Post By:2009/3/17 11:37:00 [只看该作者]

这样修改也报错

            Dim bh As String = c("定额编号")
            Dim cmd As New SQLCommand
            Dim dt As DataTable
            cmd.CommandText = "SELECT * From de WHERE 定额编号 = bh "
            dt = cmd.ExecuteReader()
            For Each dr2 As DataRow In DataTables(dt).Select("定额编号 = bh ")

怎样修改正确?BeforeLoadOuterTable 应这样设置?

谢谢!


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/17 11:46:00 [只看该作者]

以下是引用gaoqr在2009-3-17 11:37:00的发言:

这样修改也报错

            Dim bh As String = c("定额编号")
            Dim cmd As New SQLCommand
            Dim dt As DataTable
            cmd.CommandText = "SELECT * From de WHERE 定额编号 = bh "
            dt = cmd.ExecuteReader()
            For Each dr2 As DataRow In DataTables(dt).Select("定额编号 = bh ")

怎样修改正确?BeforeLoadOuterTable 应这样设置?

谢谢!


1、上面的代码和BeforeLoadOuterTable没有关系吧,报错得看错误提示,既然使用外部数据源,Cmd应该指定数据源名称,否则默认使用内部数据源,自然报错

2、如果所有的表,都不加载数据,BeforeLoadOuterTable的代码为:

e.SelectString = "Select * From "  & e.DataTableName  & "Where 1> 2"

如果是部分表:

select case e.DataTableName 
   case "表1","表2","表3"
      e.SelectString = "Select * From "   & e.DataTableName  & "Where 1> 2"
end select

3、一条一条加载,是低效做法,也容易带来其他问题,最好用Load和LoadFilter直接载入即可。
如果只是部分列,例如表4加载部分列,BeforeLoadOuterTable的代码为:

select case e.DataTableName 
   case "表1","表2","表3"
      e.SelectString = "Select * From "  &  e.DataTableName  & "Where 1> 2"
   case 
      e.SelectString = "Select 第一列,第二列,第三列 From 表 Where 1> 2"
end select

打开项目后,需要加载表4符合条件的数据:

DataTables("表4").LoadFilter = 条件表达式
DataTables("表4").Load

[此贴子已经被作者于2009-3-17 11:54:59编辑过]

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


加好友 发短信
等级:小狐 帖子:353 积分:3058 威望:0 精华:0 注册:2008/9/1 6:39:00
  发帖心情 Post By:2009/3/17 14:22:00 [只看该作者]

先谢谢老大,我再试试。

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


加好友 发短信
等级:小狐 帖子:363 积分:2998 威望:0 精华:0 注册:2008/11/11 13:42:00
  发帖心情 Post By:2009/6/3 14:56:00 [只看该作者]

能否用文本框输入的方式动态加载呢?

 回到顶部
总数 14 1 2 下一页