窗口中的Table控件
窗口中的Table控件有以下动态加载数据的方法。
使用DataTable的Load方法
如果是从同一个表中动态加载数据,可以使用DataTable的Load方法。
例如希望在某SQLTable显示今天的订单,可以在设计窗口的时候,将其SQL语句设置为:
Select * From {订单} Where [_Identify] Is Null
然后在窗口的AfterLoad事件加上代码:
Tables("窗口1_Table1").DataTable.LoadFilter
= "[日期] = #" &
Date.Today &
"#"
Tables("窗口1_Table1").DataTable.Load
使用Table的Fill方法
如果是不同的表中动态加载数据,可以使用Table的Fill方法。
对于窗口中的SQLQuery、SQLTable型Table,以及非副本的Normal型Table,都可以使用Fill方法动态加载数据。
Table的Fill方法和DataTable的语法类似:
语法
Fill(SelectString, IsQuery)
或者
Fill(SelectString, ConnectionName, IsQuery)
SelectString: Select语句
ConnectionName:可选参数,指定数据源名称
IsQuery: 逻辑型,设为True,将生成SQLQuery型Table,否则生成SQLTable型Table。
SQLTable是数据表,默认是可以编辑和保存的。
SQLQuery是查询表,默认不能编辑,通过将其AllowEdit属性设置为True,可以编辑查询结果,但不能保存编辑结果。
示例
Tables
("窗口1_Table1").Fill("Select * From {客户}","nwnd",True)不管Table原来是什么类型,显示的是什么数据,执行上述代码后,Table将成为SQLQuery类型,显示nwnd数据源中的客户表数据。
需要特别注意的是,如果只想取部分列生成SQLTable,那么必须包括主键列在内,例如:
Tables
("窗口1_Table1").Fill("Select [_Identify],[客户],[数量],[单价] From {订单}",False)这里假定订单表是内部数据表,内部数据表的主键列是_Identify,如果是外部表,请使用实际的主键列名称。
如果要生成SQLQuery,则没有这个限制:
Tables(
"窗口1_Table1").Fill("Select [客户],[数量],[单价] From {订单}",True)一定要注意,如果要生成SQLTable,第二个参数要设置为False,如果要生成SQLQuery,第二个参数则要设置为True,切不可搞混。
DataSource属性
Table有一个DataSource属性,可以通过此属性动态设置其绑定的表。
例如:
Tables
("窗口1_Table1").DataSource = DataTables("订单")执行上述代码后,不管原来的Table是何种类型(非副本的Normal类型Table除外),都将成为订单表的一个副本。
我们知道Foxtable是通过以下类型生成统计表或临时表的:
GroupTableBuilder
CrossTableBuilder
SQLGroupTableBuilder
SQLCrossTableBuilder
SQLJoinTableBuilder
DataTableBuilder
这些类型都有一个BuildDataSource方法,可以生成一个对象,此对象可以直接绑定到SQLTable和SQLQuery类型的Table,以及副本型的Table。
例如将某按钮的Click事件代码设为:
Dim
b As New GroupTableBuilder("统计表1",DataTables("订单"))那么单击此按钮,窗口中的Table1将显示各月销售数量。
提示:上面的代码中生成的统计表的名称并非"统计表1",而是"窗口1_Table1",也就是说GroupTableBuilder指定的表名是无效的,切记切记。
只有SQLTable、SQLQuery和作为副本的Normal型Table,才可以使用Table类型的Fill方法和DataSource属性,对于非副本的Normal型Table,只能使用DataTable的Fill和Load方法。
判断Table的类型
如果需要判断Table的类型,以及是否是副本,请参考: