Foxtable(狐表)用户栏目专家坐堂 → 关于SQL外部数据表的加载


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

主题:关于SQL外部数据表的加载

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


加好友 发短信
等级:小狐 帖子:363 积分:2998 威望:0 精华:0 注册:2008/11/11 13:42:00
关于SQL外部数据表的加载  发帖心情 Post By:2009/5/31 10:27:00 [只看该作者]

数据源采用的是SQL外部数据源,为了加快项目的打开速度

能否在打开项目的时候只加载表格,而不加载任何记录, 然后通过按钮“加载”来有选择的加载呢,或是打开某个表格时再加载呢?


 回到顶部
美女呀,离线,留言给我吧!
yangming
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/5/31 10:31:00 [只看该作者]

我想应该可以,我没用过外部数据源,你可以试试的

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


加好友 发短信
等级:三尾狐 帖子:719 积分:5181 威望:0 精华:1 注册:2008/9/24 10:41:00
  发帖心情 Post By:2009/5/31 10:40:00 [只看该作者]

BeforeLoadOuterTable

普通用户可以忽略本事件。
准备加载外部数据表的时候执行,可以在此修改Select语句,这样不仅可以只加载需要的字段和数据,甚至可以从另一个数据表中加载数据。
如果数据量很大,可以通过用此事件设置条件,只加载部分数据,甚至不加载数据,在运行的过程中再加载数据。
注意此时必须通过e.User来引用用户。

e参数属性:

DataTableName: 正在加载的数据表名称
SelectString:  Select语句
User:          登录用户

其实用法和BeforeLoadInnerTable事件一样,只不过用SelectString代替了Fields属性和Filter属性,这是为了是考虑到专业级用户的需要,充分发挥外部数据源的特性,并提供更大的灵活性。
使用这个事件需要一定的Sql语言知识,后续章节会有专门的Sql语言入门介绍,目前只需掌握一下Select语句的基本语法。
Select语句的语法如下:

Select * From [表名] Where 条件表达式

上面的表名是外部数据源的真实表名,不是FoxTable中的表名,两者有的时候并不相同。
上面的语句是加载所有字段,如果是加载部分字段,语法是:

Select [字段1], [字段2], [字段3], … From [表名] Where 条件表达式

条件表达式语法和我们之前介绍的表达式基本相同,你也可以参考一下BeforeLoadInnerTable事件中的例子。
我们开始举例,假定订单表来自于一个外部数据源。

示例一

对于录入员,则只加载今天的订单:

If e.DataTableName = "订单" AndAlso e.User.Name = "录入员" Then
    e.SelectString =
"Select * From [订单] Where [日期] = #" & Date.Today & "#"
End
If


示例二

对于录入员,只加载10天以内的订单:

If e.DataTableName = "订单" AndAlso e.User.Name = "录入员" Then
    Dim
StartDate As Date = Date.Today().AddDays(-10)
    e.SelectString =
"Select * From [订单] Where [日期] > #" & StartDate & "#"
End
If

示例三

只加载折扣在0.05和0.15之间的订单:

If e.DataTableName = "订单" Then
    e.SelectString = "Select * From [订单] Where [折扣] Between 0.05 And 0.15"
End If

通过上面三个例子可以看出:
1、 如果只是掌握我们用得着的,那么Sql语言其实很简单,不要把它看得太高深,后续章节会有专门的SQL语言入门介绍。
2、 BeforeLoadOuterTable和BeforeLoadInnerTable虽然参数的形式不一样,但是对于大多数人来说,使用起来其实是一回事。


如是一点数据都不要加,可更改WHERE条件,比如 where [工作号] = '★'

[此贴子已经被作者于2009-5-31 10:41:45编辑过]

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


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

BeforeLoadOuterTable

准备加载外部数据表的时候执行,可以在此修改Select语句,如果数据量很大,可以通过用此事件设置条件,只加载部分数据甚至不加载数据,在运行的过程中再加载数据。
注意此时必须通过e.User来引用用户。



     
如果想让录入员在打开项目时,默认为不加载数据. 在项目的BeforeLoadOuterTable 属性中加入如下代码:



If
e.DataTableName = "订单" AndAlso e.User.Name = "录入员" Then
    e.SelectString = "Select * From [订单] Where False"
End If


注意此时必须通过e.User来引用用户。 --------------我现在还没有设置用户,该如何使用此功能,谢谢!

[此贴子已经被作者于2009-5-31 11:48:49编辑过]

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


加好友 发短信
等级:三尾狐 帖子:719 积分:5181 威望:0 精华:1 注册:2008/9/24 10:41:00
  发帖心情 Post By:2009/5/31 11:38:00 [只看该作者]

e.User.Type <> UserTypeEnum.Developer    不等于开发者

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


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

我现在的BeforeLoadOuterTable 设置如下代码:

If e.DataTableName = "通讯往来" AndAlso e.User.Type <> UserTypeEnum.Developer  Then
    e.SelectString = "Select * From [通讯往来] Where False"
End If


其它地方都没有任何设置,为什么表格数据还是加载的啊!

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


加好友 发短信
等级:三尾狐 帖子:719 积分:5181 威望:0 精华:1 注册:2008/9/24 10:41:00
  发帖心情 Post By:2009/5/31 11:56:00 [只看该作者]

哥哥呀,你是用哪个用户登录的呀,如是开发者登录,你要改 <> 改成 = 号就不会加了呀,如上是只要不是 开发者 都不会加的


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


加好友 发短信
等级:小狐 帖子:363 积分:2998 威望:0 精华:0 注册:2008/11/11 13:42:00
回复:(woodiy)关于SQL外部数据表的加载  发帖心情 Post By:2009/5/31 12:12:00 [只看该作者]


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


楼上的兄弟啊,请再指点一下,我这样设置还是不行啊!
If e.DataTableName = "通讯往来" AndAlso e.User.Type = UserTypeEnum.Developer  Then
    e.SelectString = "Select * From [通讯往来] Where False"
End If


谢谢!

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


加好友 发短信
等级:三尾狐 帖子:719 积分:5181 威望:0 精华:1 注册:2008/9/24 10:41:00
  发帖心情 Post By:2009/5/31 12:21:00 [只看该作者]

e.SelectString = "Select * From [通讯往来] Where False"

呵,这个我不懂,我只会按帮助来搞,将WHERE FALSE 改成 其它字符列试试,如where 编号 = '##'

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


加好友 发短信
等级:童狐 帖子:252 积分:1355 威望:0 精华:0 注册:2009/4/5 13:06:00
  发帖心情 Post By:2009/5/31 12:21:00 [只看该作者]

在设置外部表的“过滤/排序”中直接设置false不行吗?

 回到顶部
总数 21 1 2 3 下一页