First we try, then we trust

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

2.4.4 实验 2-4

【利用悲观缓冲策略实现自动增长型字段】

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

2. 在出现的Project Manager窗口中选择Data页面,依次展开左侧树型结构中的Databases | testdb | Tables,选择KeyInfo表,并单击右侧Browse按钮浏览其中的内容。可以看到KeyInfo表包含两个字段,Key和Value,分别用来记录表名以及主键目前应该的取值。

3. 关闭浏览窗口。

4. 选中树型结构中的Stored Procedures结点,单击右侧New…按钮,打开存储过程编辑窗口。

5. 在存储过程编辑窗口中输入如下代码,该代码建立了一个名为NewID的存储过程。注意观察其中RLOCK()函数的使用,使得先锁定、再修改、再保存、再解锁,是典型的悲观锁定方式:

FUNCTION NewID()
LOCAL lcAlias, lnID, lcOldReprocess, lnOldArea
lnID = 0
lnOldArea = SELECT()
lcAlias = UPPER(ALIAS())
lcOldReprocess = SET('REPROCESS')
*-- 锁定直到用户按下 Esc
SET REPROCESS TO AUTOMATIC
IF !USED("KeyInfo")
   USE KeyInfo IN 0
ENDIF
SELECT KeyInfo
IF SEEK(lcAlias, "KeyInfo", "Key")
   IF RLOCK()
      lnID = KeyInfo.VALUE
      REPLACE KeyInfo.VALUE WITH lnID + 1
      UNLOCK
   ENDIF
ENDIF
SELECT (lnOldArea)
SET REPROCESS TO lcOldReprocess
RETURN lnID
ENDFUNC

6. 关闭存储过程代码编辑窗口,系统询问是否保存,选择"Yes"。

7. 在左侧树型结构中选中dept表,单击右侧Modify按钮,打开Table Designer窗口。

8. 将deptid字段的Default Value设置为刚才编写的存储过程"NewID()"。单击"OK"按钮关闭窗口,在弹出的询问窗口中选择"Yes"。

9. 单击项目管理器的Browse按钮,浏览dept表。现在表中尚没有任何记录。

10. 选择菜单 View | Append Mode,将浏览窗口的追加模式打开,这样我们就可以为该表追加记录了。在Browse窗口的department字段中输入"经管系",并按键盘上向下移动的箭头,可以看到系统自动分配了一个数字给deptid字段,重复多次,观察主键的自动生成过程。

11. 关闭浏览窗口。

12. 选中项目管理器中的KeyInfo表,单击右侧Browse按钮,可以看到KeyInfo表中记录了Dept表主键分配到了哪一个数字。

13. 关闭浏览窗口,关闭Visual FoxPro。

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