VFP缓冲表入门
猫猫在做单表增删查改,修改了一条数据,但我不想保存,需要还原到原来的状态。
同样无论我去对表操作多少,增删改,都可以还原到最初的状态。
有人说,我重新打开表(本地DBF),重新下载表(SQLEXEC)但这样都会带来额外的操作,比如关闭表会引发GRID控件白屏等等。
而这一切在VFP中里面的功能超级简单,甚至还能一键更新到后台数据库。
通过缓冲,可以方便地检测并解决数据更新操作中的冲突:当前记录被复制到由 Visual FoxPro 管理的内存或磁盘区域。其他仍然可以同时访问原来的记录。当离开该记录或以编程方式更新该记录时,Visual FoxPro 尝试锁定该记录、检验没有被其他用户修改、然后写入变化。在尝试更新数据之后,也必须解决阻止将该变化写入原始表的冲突。
Visual FoxPro 具有两种缓冲类型:记录(行)缓冲和表缓冲。
单行记录每次要访问、修改和写入单个记录,选择记录缓冲。
记录(行)缓冲提供对多用户环境中其他用户数据更新操作影响最小的适当有效性检查机制。
要缓冲几条记录的更新,选择表缓冲。
表缓冲提供了处理一个表中几个记录或一对多关系中子表记录的最有效途径。
选择锁定模式:保守或开放
Visual FoxPro 以两种锁定模式提供缓冲:保守和开放。
在F/S共享文件架构中,大家打开的是同一个表,所以对缓冲的了解和掌握更加必要。
猫猫最近还见过一家企业现在还是利用共享文件夹F/S来做网络版ERP,最近他在咨询我怎么改进。
保守缓冲
保守缓冲防止共享文件夹F/S架构的其他用户访问你正在修改的特定记录或表。保守锁定为修改单个记录提供了最安全的环境,就是说,
保守+行缓冲:我改即我锁行了,你不能改我这一行了。
保守+表缓冲:我改即我锁表了,你不能改我这表了。
好处是:数据安全,不会出现,同一时刻只有一个人修改。
坏处是:效率较低
开放缓冲
开放缓冲锁定只在写入记录时获得,因次减少了共享文件夹F/S架构任何单个用户独占系统的时间。当在视图上使用记录或表缓冲时,Visual FoxPro 强制使用开放锁定。
如果你是C/S架构,就无所谓开放,保守了,我是大都数情况下习惯用表缓冲。
在C/S架构下,只有一个情况需要用行缓冲
比如后表有一张表,同时有很多人打开这个表进行修改,用户移动到下一记录,当前记录就要自动保存,下一条就要刷新当前值。
(不知道有没有哪些狐友实现了)
这个功能用CursorAdpater(CA)来实现,爽爆了。
用 CURSORSETPROP( ) 函数设置的 Buffering 属性值,决定了缓冲和锁定的方式。
下表总结了 Buffering 属性的有效值。
要启用 | 使用该值 |
---|---|
无缓冲。默认值。 | 1 |
一修改就锁定记录、移动指针或发出 TABLEUPDATE( ) 时更新的保守+记录(行)锁定。 | 2 |
修改时不锁,等到记录指针移动后再锁定并更新的开放记录(行)锁定。 | 3 |
一修改即锁定记录、发出 TABLEUPDATE( ) 之后更新,保守表锁定。 | 4 |
修改时不锁,等到发出 TABLEUPDATE( ) 后再锁定并更新编辑记录,开放表锁定。 | 5 |
保守就是修改就锁,直到发出tablupdate命令更新后不锁。
开放就是修改不锁,直到发出tabupdate才锁并更新后不锁。
Buffering 的默认值,表为 1 而视图为 3。
如果使用缓冲访问远程数据,Buffering 属性为 3 (开放行缓冲) 或 5 (开放表缓冲)。
设置缓冲命令
CURSORSETPROP( cProperty [, eExpression] [,cTableAlias | nWorkArea])
cProperty参数固定为:Buffering
eExpression参数就为缓冲的值了
- – 设置行和表缓冲为 Off。记录锁定和数据写入与早期的 FoxPro 版本相同。(默认)
- – 设置保守行缓冲为 On。
- – 设置开放行缓冲为 On。
- – 设置保守表缓冲为 On。
- – 设置开放表缓冲为 On。
对于除 1(off) 以外的所有 Buffering 模式,SET MULTILOCKS 必须被设置为 ON。
cTableAlias参数
指定要设置其属性的表或临时表的别名。
nWorkArea
指定要设置其属性的表或临时表的工作区。如果为 nWorkArea 指定 0,CURSORSETPROP( ) 会设置用于所有后来表或临时表的环境设置。
####示例:开启一个表缓冲
SET MULTILOCKS ON
USE 教师
CURSORSETPROP("Buffering", 4,"教师")
划重点
Tableupdate命令配上缓冲再加上cusorAdaptery(CA)是一种超爽的存在。
可以实现一键SAVE,无需写任何的SQL语句。
配上祺佑三层开发框架(猫框),可以实现BS的一键SAVE。