首页 新闻 体育 娱乐 游戏 邮箱 搜索 短信 聊天 点卡 天气 答疑 交友 导航
新浪首页 > 科技时代 > 学园 > 开发者乐园 > 正文

用Visual FoxPro 6.0网络编程应注意的问题(2)

http://www.sina.com.cn 2004年04月20日 10:34 天极网

  文/朱爱红

  3 Visual FoxPro 6.0网络程序设计应注意的几个问题

  在单用户状态下,数据库的使用没有共享和独占概念,用户可以随意对表进行增、删、改、查等操作,不受任何影响。但是,在网络环境下就不一样,当表被打开时,如果两个用户对一个表同时进行修改、删除等操作,后果将不堪设想。所以在网络环境下表的打开有两种方式:一是共享方式,表示这个表可以被任何用户操作;二是独占方式,表示这个表只能被一个用户操作。例如,对于商场管理系统,由于数据量大,需经常对表进行数据整理(需执行PACK、ZAP等操作),当系统管理员进行数据整理时表必须以独占方式打开;而前台收款和后台操作同时进行时,表必须以共享方式打开。那么如何解决多个用户同时对表操作而不致出现问题呢?下面笔者谈几点体会。

  3.1一般的解决方法

  文件或记录的加锁与解锁是网络程序设计中经常用到的方法。VFP提供了FLOCK()、RLOCK()和LOCK()函数对文件和记录进行加锁,一个文件或记录加锁后,只能由加锁用户进行读写,其他用户只能读不能写。当对记录或文件进行修改或删除时,必须加锁。当对文件操作完毕应及时解锁,VFP提供UNLOCK命令对指定工作区解锁。如:

  do while !flock()

  wait window '正在锁定数据库请稍候!' Timeout 0.05

  enddo

  :

  unlock

  当对文件或记录加锁时,若由于某种原因没有锁住,可以再试加锁操作,并可指定加锁次数或试锁的时间。VFP提供了SET REPROCESS TO命令来确定如何控制失败的记录或文件加锁。此外,VFP还提供SET REFRESH TO命令控制多长时间后显示网络中其他用户对记录所做的修改。

  3.2慎用VFP的隐含锁定功能

  当VFP处于隐含锁定状态(即SET LOCK设置为ON)时,执行某些命令时将自动对表加锁。这些命令包括:

  AVERAGE、CALCULATE、LIST、DISPLAY、SORT、INDEX、COUNT、TOTAL、SUM、COPY TO、COPY TO ARRAY、REPORT、JOIN、LABEL。

  在网络环境中,必须将SET LOCK设置为OFF,以免影响其他用户的正常使用。例如,一个商场管理系统,后台正在打印商品信息,若SET LOCK设置为ON,则此时商品信息表将加锁,前台销售需对商品信息表的商品库存进行减操作,也需对商品信息表加锁。此时将陷入锁定等待状态,影响前台收款。

  3.3使用VFP的多记录锁功能时要及时对记录开锁

  Visual FoxPro 6.0将SET MULTILOCKS设置为ON,即设置多记录锁,表示同时对多条记录加锁。对此功能的使用需谨慎,一定要及时开锁,否则容易引起死锁。假定有一个网络版的商场销售系统,许多表单的对表操作采用了表缓冲区状态,由于VFP规定使用缓冲区功能必须将SET MULTILOCKS设置为ON。所以系统运行时是处于多锁状态。前台销货存盘时要对商品信息表(dspbmk.dbf)中的商品库存量进行修改,在存盘按钮的click事件中加入以下程序段:

  sele sp /*销售商品清单

  go top

  do while .not. eof()

  sele dspbmk

  seek sp.spbh

  do while !rlock()

  wait window '正在锁定数据库请稍候!' Timeout 0.05

  enddo

  repl kcl with kcl-sp.sl

  sele sp

  skip

  enddo

  sele dspbmk

  unlock in dspbmk

  程序对每个记录修改后并未及时开锁,在全部修改完后才开锁。

  假定有甲乙两个收款台,前台甲正在卖编号为1、2、3的商品,前台乙正在卖编号为3、2、1的商品,甲存盘时首先锁定1商品,库存量修改完后记录指针拖动,又锁定了2商品的记录,处理完后试图锁定2商品;而前台先锁定了3商品记录,处理完后试图锁定2商品。这时就发生死锁,造成系统瘫痪。纠其原因,主要因为SET MULTILOCKS设置为ON了,而以上程序却未对记录及时开锁。

<< 上一页

评论】【应用软件论坛】【推荐】【 】【打印】【关闭
 

 
新 闻 查 询
关键词一
关键词二
 

 发表评论: 匿名发表 新浪会员代号:  密码:
 



科技时代意见反馈留言板 电话:010-82628888-5488   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2004 SINA Inc. All Rights Reserved

版权所有 新浪网