网站大量收购独家精品文档,联系QQ:2885784924

VisualFoxpro中的多用户与数据缓冲问题.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VisualFoxpro中的多用户及数据缓冲问题很多狐友(Foxers)都是从Dbase―FoxBase―Foxpro―VFP这样一条路走过来的,如果说从FoxBase 到Foxpro是一次飞跃,那么从Foxpro到VFP就是一次升华。漫漫编程路上的两次大变化都伴随着升级的兴奋与适应的痛苦,惯性思维往往使我们容易忽略新版本的新内容。我们先来看看下面这个在表单中编辑记录的例子: ? 在Foxpro 2.X时代,我是这样设计的: ? 1、 在屏幕上放置与表中字段对应的文本框(TEXT)控件,用来存放相应的内存变量(如M.CUST_IDT和M.NAME等); ? 2、 当用户将表的指针定位到某一特定记录时(比如按了"下一个记录"按钮),就用scatter memvar 语句把该记录的所有字段传给相应的内存变量,再用show get来刷新屏幕上的文本框中显示的值。在这一时刻,用户是不能编辑这些变量的(此时文本框或者被设置为不可用(Disabled),或者其when子句返回的是.F.值),因为用户处在"浏览"状态。 ? 3、 当用户选择了"编辑"按钮时,程序就锁定该记录(如果无法锁定,则显示提示信息),然后检测每个字段值和相应的内存变量值(如果有不同的,说明一定是有其它用户在我们进入编辑状态后修改并保存了记录,在这种情况下,要显示提示信息),之后再用scatter memvar和show get语句刷新,这样用户就看到记录中的当前值了; ? 4、 如果所有字段和相应的内存变量完全匹配,就把变量所在的文本框控件都设置为可用(Enabled)或都让when子句返回.T.,以便让用户可以来编辑这些变量; ? 5、 当用户选择了"保存"按钮时,根据一定的规则对输入的数据进行检验,然后用gatter memvar语句将内存变量写回到记录中,并对记录解锁(unlock),再把所有的内存变量所在文本框设置为不可用(Disabled),或者让其when子句返回.F.值,这时,用户又回到了"浏览"状态。 ? 请注意,在这一过程中我们没有直接读写记录,而是先将各字段值赋给同名内存变量,再让用户编辑这些内存变量,如果一切正常再把这些内存变量写回到记录当中。之所以用这种方法主要是为了保护表,如果不符合验证规则,就不允许数据回存到表中。另一点要注意的就是,当用户编辑记录时要对记录加锁(lock),这样就防止了其它用户在同一时间编辑同一条记录。但是,这种方法有一个很大的缺点:假设一个用户开始编辑某一记录,在他按下"保存"按钮前,记录一直处于锁定状态,如果此时该用户有事暂时外出,如午餐,那么其它用户就不能对该记录进行编辑了L。 ? 当然,你可以不在进入"编辑"状态时加锁,而只在"保存"记录之前加锁,保存完后马上解锁,这样可以使记录被锁定时间最短,以便其它用户有充分的时间编辑该记录。但是这也有缺点,试想:如果用户编辑了内存变量,这后点击"保存",可如果其它用户在你点"保存"之前也编辑了这条记录,并且还没保存,这时会发生什么现象呢?你的保存要覆盖他人的修改吗?要放弃你的修改吗?这些都是我们要在设计时认真考虑的问题。 ? 我们如此费尽心机地设计,其目的都是为了保护数据。如果你写的程序只是你一人使用,那设计起来可能会简单得多:你可以直接读取记录中的字段,比如你可以直接在屏幕中browse一个表,这样你输入的内容就直接写进记录了。但是,我们不能担保那些最终用户也象您一样都清楚能输入什么不能输入什么,我们不得不在用户与数据表之间建立一个"防火墙"来保护数据。在Foxpro 2.X中创建这样的"防火墙"要写一大堆的代码! ? 值得我们高兴的是,VFP提供了内建的"防火墙"机制,它有两方面的作用:一是可直接读取记录,二是只允许通过所有检验规则的数据被写回。这一机制就是缓冲。 ? 缓冲 ? 在刚才我们讲到的例子中,是通过内存变量存贮记录内容,这种方法可以被认为是手工建立了一个数据缓冲器,通过使用scatter memvar把数据从记录中传送到"缓冲"中,再用gather memvar从"缓冲"中传回到记录。 ? VFP不仅能自动进行单条记录的缓冲(称为行缓冲或记录缓冲),而且还支持另一种类型的缓冲,即表缓冲,表缓冲可通过缓冲器存取多条记录。行缓冲一般用于一次存取一个记录时,这种机制普遍应用于数据录入,就象前文提到的那样:用户可以在表单中显示或编辑单条记录。表缓冲则适用于一次更新多条记录,比如一张订货单的明细录入屏幕,通过对物品明细表使用表缓冲,可以允许用户编辑多条明细记录,最后一次性地将所有明细记录保存或放弃。 ? 除了两种缓冲机制,VFP还有两种锁定机制。前文讲述的那种在Foxpro 2.X中的加锁方式被称为保守式锁定法(或悲观锁定法)――当用户选择"编辑"时加锁,直到用户选择了"

文档评论(0)

0520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档