定向数据表

同样一个系统,可能需要使用不同的数据源。
Foxtable提供了数据表定向功能,即使系统已经设计完成,你也可以将数据表重新定向到不同的数据源。
此功能也为我们的设计带来了极大的便利,我们可以使用内部数据表进行系统开发,在开发完成后,只需单击几次鼠标,即可转换到一个SQL Server或者Access的数据源,并自动在新的数据源生成相同结构的数据表;反之,如果你之前的系统是基于SQL Server或者Access的数据源开发的,也只需单击几次鼠标即可转换为内部数据表,这样你随时可以为自己的项目生成一个“低端”版本交给他人试用;定向不仅可以在内外数据源之间进行,也可以在外部数据源之间进行,彻底摆脱因数据源的变动而需要重新调整和设计系统的烦恼。

注意事项

不是任何数据表都可以重新定向的,对于外部数据表,只有满足下述条件的表才能重定向:

1、主键列的名称为"_Identify",且为自动增量型。
2、必须有一个名称为"_Locked"的逻辑列,用于保存行的锁定标记。

至于外部查询表,必须满足以下条件:

1、查询语句的表名必须也用大括号括起来,以便和内部数据表保持一致,例如:

SELECT 客户,SUM(数量) AS 数量 FROM {订单} GROUP BY 客户

2、必须同时定向查询表和查询表的数据来源表,例如上面查询表的数据来自于订单表,如果要重定向这个查询,那么必须将客户表重定向到相同的数据源。

数据表重定向规则:

1、如果目标数据源存在相同结构的同名表,则直接定向到该表。
2、如果存在同名表,但结构不同,则拒绝定向。
3、如果目标数据源不存在同名表,将自动创建一个相同结构的空白同名表,并定向到此表。

重定向之前必须备份你的项目,理由:

1、一旦重定向中途失败,可能导致你的项目再也无法回到正常状态。
2、内部数据表重定向到外部数据源之后,会被自动删除。
3、Foxtable在重定向之前,也会自动备份项目,但是这不能代替你自己的备份,多一个备份,多一个保险。

重定向之后必须检查涉及到数据源的代码,例如你本来使用的内部数据表,下面的代码能够正常执行:

Dim q As new QueryBuilder
q.TableName =
"销量统计"
q.SelectString =
"Select 产品,Sum(数量) As 数量 From {订单} Group By 产品"
q.Build

MainTable
= Tables("销量统计"
)

如果将订单表重新定向到一个SQL Server数据源,假定数据源的名称为"SaleData",那么上面的代码必须改为:

Dim q As new QueryBuilder
q.
ConnectionName = "SaleData"
q.TableName =
"销量统计"
q.SelectString =
"Select 产品,Sum(数量) As 数量 From {订单} Group By 产品"
q.Build

MainTable
= Tables("销量统计"
)

如果你是从一个外部数据源定向到另一个外部数据源,也要记得修改代码中有关数据源的名称;或者你定向结束后,删除原数据源,将新数据源命名为原数据源同样的名称,这样就无须检查和修改代码了。

重定向表

如果你要将数据表重定向到一个外部数据源,你必须首先创建一个数据库,这个数据库可以是空白的,然后在你的项目中增加一个新的数据源,连接此数据库。
重定向的操作很简单,在杂项功能区,单击"Redirect"按钮即可,例如下图将内部表全部定向到一个名为FishMIS的外部数据源:

带数据的定向

如果目标数据源不存在同名同结构的表,那么重定向只是创建一个相同结构的同名空白表,并不会包括任何数据。
如果你需要连同数据一起重定向,那么很简单:

1、外部表定向到内部表
定向结束后,利用菜单中的高速合并功能,将原数据合并过来。

2、外部表定向到新的外部数据源
将原数据源中的相关数据表导入到新的数据源,然后再开始定向。

3、内部表定向到外部数据源
在菜单中单击下面的按钮,会生成一个Access文件,默认包括所有的内部数据表:

你可以直接定向到这个Access文件;如果要定向到一个SQL SERVER数据源,那么只能在定向结束后,利用高速合并功能,将此Access文件中的数据合并到对应的表中。

提示:

ToAccess功能生成的Access文件,_Identify列的值是重新从1开始排列的,所以_Identify列的值和原始数据可能不同。
这有一个隐患:如果基于_Identify设置了关联,那么可能会导致父子关系的丢失和紊乱。


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