BeforeLoadOuterTable

普通用户可以忽略本事件。
准备加载外部数据表的时候执行,可以在此修改Select语句,这样不仅可以只加载需要的字段和数据,甚至可以从另一个数据表中加载数据。
如果数据量很大,可以通过用此事件设置条件,只加载部分数据,甚至不加载数据,在运行的过程中根据条件动态加载数据。
有关动态加载数据,会有专门的章节介绍。


e参数属性:

DataTableName:   正在加载的数据表名称
SelectString:    Select语句
User:            登录用户
Cancel:          逻辑型,设置为True,将不加载此表。
HideSplashForm: 逻辑型,设为True,关闭Foxtable的启动封面。

注意此事件必须通过e.User来引用用户。

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

Select语句的语法如下:

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

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

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

需要注意的是,如果只是加载部分字段,那么必须包括主键列在内,否则会带来不可预知的错误,这点要切记。

示例一

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

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

示例四

如果只是加载部分字段,那么必须包括主键列在内,否则会带来不可预知的错误。
假定客户表的主键是“客户编号”,那么在加载部分字段的时候,客户编号列必须包括在内:

If e.DataTableName = "订单" Then
    e.SelectString = "Select [客户编号],[公司名称],[联系人],[地址],[电话],[手机] From {客户}"
End If

示例五

初始不加载任何订单:

If e.DataTableName = "订单" Then
    e.SelectString = "Select * From {订单} Where
[_Identify] Is Null"
End If

由于_Identify列是不可能为空的,所以上述代码会使得订单表初始不加载任何数据。

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


本页地址:http://www.foxtable.com/webhelp/topics/0670.htm