First we try, then we trust

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2.4.2 实验 2-2

【使用Visual FoxPro实现记录锁定与解锁】

【步骤1】代码设计

1. 启动Visual FoxPro 8.0,选择菜单File | Open…,在弹出的对话框中打开SampleCode\Chapter 2\Lab 2-2\Lock\Lock.pjx(若出现提示"Project has been movied…..",请按"Yes"按钮以确认路径更改)。

2. 在出现的Project Manager窗口中选择Documents页面,展开左侧树型结构中的Forms,选中lock表单,并单击右侧Modify按钮打开Form Designer窗口。

3. 选择菜单 View | Data Environment…,打开数据环境窗口。选中book表,并在属性窗口中将其BufferModeOverride属性设置为4-Pessimistic table buffering(悲观表缓冲),如图 2-10。关于悲观缓冲可以参考【2.1.3乐观与悲观缓冲策略】,这将导致在修改记录前先加锁(刚好与我们书吧的故事相吻合)。

图 2-10 设置数据环境的缓冲模式

4. 关闭Data Environment窗口。

5. 在属性窗口最上方的下拉列表框中选择Form1,将Form1的DataSession属性设置为2-Private Data Session(私有数据工作期),如图 2-11。这确保表单在运行期间使用自己单独的数据工作期。

图 2-11 设置表单工作期属性为私有工作期

6. 双击窗体的网格控件,打开代码窗口。从窗口上面的Procedure下拉列表中选中Refresh事件。

7. 在代码窗体中输入命令"THIS.SetAll("dynamicbackcolor", "IIF(ISRLOCKED(), RGB(128,255,0), RGB(255,255,255))", "Column")"。该命令用于动态设置网格控件行的背景颜色。一旦一行记录被锁定,该行的背景色将变成绿色。

8. 关闭代码窗口。

9. 在Form Designer窗口中双击Lock按钮,打开Lock按钮的Click事件代码编辑窗口。

10. 输入以下几行代码,该代码用RLOCK()函数对选中的记录进行加锁。

IF !RLOCK() 
   =MESSAGEBOX("加锁失败,请检查是否有其他用户使用该记录")
ENDIF
THISFORM.REFRESH()

11. 从代码窗口左上方的Object下拉列表中选择cmdUnLock,切换到UnLock按钮的Click事件代码编辑界面。

12. 输入以下两行代码,该代码将对所有锁定的记录进行解锁。

UNLOCK ALL
THISFORM.REFRESH()

13. 关闭代码窗口,关闭Form Designer窗口,系统提示是否保存修改,选择"Yes"。

【步骤2】验证记录锁定

14. 点击Project Manager窗口右侧的Run按钮两次,将刚才设计的窗体运行两次。拖动窗体排列整齐(如图 2-12)。

15. 在左侧表单中选中第1行,按下Lock按钮,可以看见第1行的背景色变成了绿色。再选中第3行,按下Lock按钮,第3行也变成了绿色。

16. 在右侧表单中选中第2行,按下Lock按钮,第2行变成绿色,表示可以正常锁定。

17. 在右侧表单中选中第3行,按下Lock按钮,出现一消息框,警告"加锁失败,检查其他用户是否锁定该记录"。这是因为左侧窗体已经将第3行锁定,所以右侧窗体无法完成加锁任务。

18. 按下确定按钮,关闭消息框。

图 2-12 用Visual FoxPro实现记录锁定

19. 尝试将右侧表单第3行记录的单价更改为70,你会发现系统不允许进行修改。这是因为我们在第3步中将数据缓冲设置为了4-Pessimistic table buffering(悲观表缓冲),这导致修改数据前要先加锁,加锁失败将导致警告框的出现(如图 2-13)。单击OK按钮关闭警告框。

图 2-13 无法加锁导致的修改失败

20. 尝试将第4行记录的单价修改成40,并移动记录指针,你会发现第4行变绿了。这是因为修改数据前执行了加锁操作,导致该行记录被锁定。

21. 在左侧表单上单击UnLock按钮,释放所有锁,可以看见所有的行的背景都重新变成了白色。

22. 在右侧窗体上选中第3行,再次单击Lock按钮,这次可以成功完成对第3行记录的加锁操作。

23. 关闭所有表单,关闭Visual FoxPro。

通过本实验可以看到,借助锁可以防止其它用户对该记录进行修改。这就如同本章【2.1.2数据加锁】中书吧的例子,顾客只有持有"锁"才能借阅图书(修改数据),在没有得到"锁"之前是无法借阅图书(修改数据)的,只能浏览数据。

posted on 2005-08-19 23:10  吕震宇  阅读(3799)  评论(1编辑  收藏  举报