First we try, then we trust

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

2.4.3 实验 2-3

【乐观缓冲模式下更新图书阅读次数及相关并发冲突】

【步骤1】代码设计

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

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

3. 选择菜单 View | Data Environment…,打开数据环境窗口。选中bookview视图,并在属性窗口中将其BufferModeOverride属性设置为5-Optimistic table buffering(乐观表缓冲)。

4. 关闭Data Environment窗口。

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

6. 双击"更新阅读次数"按钮,打开cmdUpdate按钮的Click事件代码编辑窗口。

7. 输入以下几行代码,该代码将阅读次数加一并强制保存(不做共享冲突判断。更多内容请参考Visual FoxPro帮助手册中TableUpdate函数部分)。

REPLACE 阅读次数 WITH 阅读次数 + 1
=TABLEUPDATE(.F., .T.)
THISFORM.REFRESH

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

【步骤2】验证阅读次数更新冲突

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

10. 在左侧表单中单击"更新阅读次数"按钮一次,可以看到阅读次数由初始的0加1变为了1。

11. 在右侧表单中单击"更新阅读次数"按钮一次,可以看到阅读次数也从0变为1。

12. 在左侧表单中单击"刷新"按钮从数据库中再次载入数据,可以看到第1本书被更新了两次阅读次数,而阅读次数字段仅仅加了1,出现了并发问题。如图 2-14:

图 2-14 阅读次数的并发冲突

13. 单击左侧表单的"重置"按钮,单击右侧表单的"刷新"按钮,将数据回复到初始状态。

14. 关闭这两个窗口。

【步骤3】并发冲突的检验与解决(关于该部分实验的理论知识可以参考2.1.4数据删除与更新)

15. 在Project Manager窗口选中OptimisticBuffering表单,并单击右侧Modify按钮打开Form Designer窗口。

16. 双击"完善的更新机制"按钮,查看里面的代码。该段代码通过OLDVAL()函数与CURVAL()函数检验被修改过的字段,并提示用户是否强制更新。

17. 关闭代码窗口,关闭Form Designer窗口。

18. 点击Project Manager窗口右侧的Run按钮两次,将该窗体再运行两次。拖动窗体排列整齐。

19. 在左侧表单中单击"更新阅读次数"按钮3次,可以看到阅读次数此时为3。

20. 在右侧表单中单击"完善的更新机制"按钮,程序发现了潜在的共享冲突,并提供了警告信息,如图 2-15:

图 2-15 检测并发冲突

21. 点击"否",不进行强制更新。此时会发现右侧窗体中第一本书的阅读次数已经得到刷新,显示了最新的数据"3"。

22. 再次点击右侧表单的"完善的更新机制"按钮,可以看到这次成功的完成了更新。

23. 关闭所有窗口,关闭Visual FoxPro。

posted on 2005-08-19 23:12  吕震宇  阅读(2373)  评论(3编辑  收藏  举报