foxpro 用离线视图工作
发表于:2007-07-02来源:作者:点击数:
标签:
你可以用 USE 命令打开离线视图就象打开一个联线视图一样。然而, 就象我在前面的说明一样, VFP 事实上打开离线视图的持久表而不是执行一条一般的 SQL SELECT 命令。 使用离线视图工作时有一些要注意的事: 改变模式到离线视图,添加, 修改或删除操作都是对视
你可以用 USE 命令打开离线视图就象打开一个联线视图一样。然而,
就象我在前面的说明一样, VFP
事实上打开离线视图的持久表而不是执行一条一般的 SQL SELECT 命令。
使用离线视图工作时有一些要注意的事:
- 改变模式到离线视图,添加,
修改或删除操作都是对视图表而没有写回到视图所基于的源表。这意味着其它人打开源表时,看不到数据在离线视图中的改变。
- 在另一方面: 你也不能从源表中刷新离线视图的内容。
- 视图表的行动象一个普通表的缓存。getfldstate() 和getnextmodified()
反映了视图的缓存状态。tableupdate()
将视图缓冲中的修改写回到视图表中, tablerevert()
则取消修改。没有这些函数将不能对源表进行任何处理。
- 你不能修改视图表的结构,也不能使用对它使用create trigger, insert,
pack, 或 zap 命令 (但可以使用delete all)。
- 与联线视图一样, 离线视图自动使用行缓存和表缓存, 因此你应该将multilocks
设置为 on。如果你试图关闭缓存将会得到一条错误信息。
- 与联线视图不同的是,
打开一个离线视图不会自动打开视图所基于的源表 ,这是由于离线视图是与源表"脱离的"。这意味着当你把离线视图交给别人时,不需要提供源表的拷贝
(它可能会非常大或是一个非VFP 数据表)。同时也意味着你可以在源表上进行某些类型的(诸如重建索引之类)维护,
甚至在多个用户打开离线视图时。稍后我们将看到这种例子。
- 在离线视图上输入数据时,源表的规则和触发器不会激活,
仅当你将数据更新到源表时,
源表的规则和触发器才会激活。这就是说除非你为使用 dbsetprop()为离线视图定义了规则,
有可能有不正确的数据进入离线视图并不能在较早的时候被发现。
- 如果你使用"修补关键字",
你需要为添加到视图中的记录指定关键字值。最常用的指定关键字段值的方法是调用一个NEXTID
程序来为该表的取得下一个可用的基本关键字段值。如果你使用的是这种方案,
你需要使用dbsetprop() 来设置离线视图中的字段的DefaultValue 属性,这样添加记录到离线视图中时可取得指定的关键字段值。
- 使用候选关键字段的一个不利因素是:
如果离线视图用于允许远程数据输入 (如在笔记本电脑中),
你需要为每一个笔记本电脑指定一个关键字段值块,这样主关键字段的值才不会重复。作为一种选择,
你可以将用户名或笔记本电脑名组合进关键字段值中,
这样就不用担心会出现相同的主关键字段值了。
- 如果一个离线视图是用于一个远程计算机上进行数据输入,
你需要传送离线视图表(包括FPT), 持久表缓存文件和数据库容器(DBC,
DCX, 和DCT) 到那个远程计算机中。
如果你需要确定自视图离线后那些记录被修改了, 使用use 命令的admin
子句。这需要以独占方式访问视图表否则你会得到一条错误信息。下面是使用该命令的例子:
use LV_CUSTOMER admin exclusive
当用admin 模式打开视图时,它自动使用表缓存而不是行缓存。
试图改变表的缓存模式会造成错误。
一但视图以admin 模式打开, 你可以使用getnextmodified() 和 getfldstate()
来确定哪些记录和这些记录中的哪些字段被修改了。
有趣的是, 在admin模式下打开一个离线视图时并没有自动打开它的源表,
因此 VFP 必须使用 TBF 文件来检查哪些记录被修改了。
当视图在管理模式下打开时,你不能更新源表;
更详细的信息参见下一章中的更新源表。可是, 你可以使用tablerevert()
来撤消对离线视图的修改.
原文转自:http://www.ltesting.net