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。