NetWare下的FoxPro网络编程

NetWare下的FoxPro网络编程

ID:41037283

大小:35.50 KB

页数:4页

时间:2019-08-14

NetWare下的FoxPro网络编程_第1页
NetWare下的FoxPro网络编程_第2页
NetWare下的FoxPro网络编程_第3页
NetWare下的FoxPro网络编程_第4页
资源描述:

《NetWare下的FoxPro网络编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、NetWare下的FoxPro网络编程网络环境是一个多用户环境,数据库在网络上的应用首先要解决的一个问题就是如何协调不同用户在网络上的共享冲突问题。例如,一个数据库文件,用户甲打开它进行查询工作,同时用户乙打开它进行修改,这就发生了混乱。一般来说,任何网络系统,任何数据库系统,共享文件都不允许在某一时刻有两个以上的用户同时修改它,否则将产生混乱。解决此类问题,可以利用数据库系统的文件或记录加锁予以解决。下面以NetWare操作系统为例说明如何利用FoxPro数据库系统开发网络应用程序。在Foxpro数据库系统,执行某些修改命令时,系统会

2、自动对文件或记录加锁,当操作完成后,加锁自动解除。此外,程序设计人员也可以对文件或记录进行人为的加锁、解锁处理,以防止出现混乱。在网络上的数据库处理中,经常会遇到死锁。例如用户甲锁住了记录A而去操作记录B,而此时正好用户乙锁住记录B而去操作记录A,出现双方无限期的等待对方的现象,形成死锁,这在网络上的数据库操作中经常遇到。下面以一个例子说明。在一个数据库系统里,两个进程A与B的程序如下:A.PRGB.PRGONERRORDOERR1ONERRORDOERR2SETEXCLUSIVEONSETEXCLUSIVEONSELEASELEAUS

3、EFILE1USEFILE2……SELEBSELEBUSEFILE2USEFILE1…………假设A与B的错误处理程序ERR1.PRG与err2.prg结构相同:IFERROR()=108RETRYELSERETURNTOMASTERENDIF这里108号错误表示文件被另一文件使用,不能打开。很显然,上述双方将无限期地等下去,出现死锁。形成死锁的原因主要有以下几种:1)程序对资源的封锁是采取独占方式,不允许他人对同一数据资源再封锁极其操作。2)已经对某些资源设置了封锁机制,在执行过程中还对新的资源发出封锁请求而不释放原有资源。3)已经封锁

4、的资源被某程序挂起,但却被授予其他程序使用。4)允许程序等待其他程序对数据资源的释放,程序间对数据的请求形成互相等待状态。解决死锁的方法有很多,最简单也是最常用的方法是“一次封锁法”,其基本思想是:每一个要求申请资源的程序在其执行前先对其使用的所有数据资源进行封锁,一次封锁要求把所有打开的数据库文件逐个的加锁,且一次封锁成功。如果有一个文件封锁失败则整个失败,必须重新封锁。一次封锁法的优点是简单方便,它利用的原理是破坏死锁发生的第二个条件;缺点是要求程序在执行前将所有数据一次封锁。这样做不但效率低,而且有时根本不能知道哪些文件将要使用。

5、遇到此情况,只好加大封锁范围,将所有可能用到的数据库全部封锁,不管是否真正用到。在网络上开发数据库系统,有许多命令和函数可以处理共享数据库的冲突问题。常用的处理冲突错误的方法是使用ONERROR子程序掌握冲突的处理出口,或重做(RETRY),或返回(RETURN)。下面是一些处理冲突的命令和函数。RETRY用于修正子程序来重复执行一条命令,知道可以使用为止。SETEXCLUSIVEON/OFF指明以后打开的数据库文件是独占或共享。ON表示独占。UNLOCK[ALL]解除当前工作区的数据库文件的全部记录锁定。ERROR()在多用户状态下找

6、出造成错误的原因,返回值为108表示数据库文件已被另一程序独占打开而出错。下表是出错信息一览表。错误码原因108试图打开被独占打开的文件,或试图独占被他人已打开的文件109记录加锁失败110没有以独占方式打开文件,却执行了要求独占方式运行的命令111试图对一个只读文件进行写操作124事先未指定打印机的路径,或打印机非共享130用户尚未加锁的记录执行Replace或read命令FLOCK()对当前数据库文件加锁,成功返回.T.,否则返回.F.。ONERRORDO<出错处理程序>在出现错误时转到<出错处理程序>执行LOCK()/RLOCK(

7、)对当前数据库文件的当前记录加锁,成功返回.T.。SYS(0):给出网络分配的机器名和机器号;SYS(5):给出当前驱动器号;SYS(3):给出一个文件名;SYS(7):给出指定工作区已打开的格式文件名;SYS(12):给出当前内存剩余字节数;SYS(13):给出当前打印机状态(Ready/Offline)。下面举两个例子说明一次封锁法处理死锁的过程。以非独占方式打开m个数据库文件。SETEXCLUSIVEOFFDOWHILE.T.SELEAUSEfile1IF.NOT.FLOCK()UNLOCKALL*如果封锁失败,重新封锁LOOPE

8、NDIFSELEB*若file1封锁成功,再封锁file2USEfile2IF.NOT.FLOCK()UNLOCKALLLOOPENDIF……SELEmIFFLOCK()*若filem封锁成功,必然前面m-

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。