汉字FOXBASE+学习辅导

Author: 丁晓明 Date: 1994-08-12

        从本周开始,将有十次对FOXBASE的学习辅导,所选用的课本是由周根光、胥五村编著的《汉字FOXBASE+实用教程》,由电子工业出版社出版。该书写得较浅显,有较多例子,全书结构合理,便于自学。
        我们特地请了丁晓明老师主持这次讲座,他将以教材为蓝本,对全书的重点、难点作纲要性的总结,帮助读者尽快掌握FOXBASE。希望正在自学FOXBASE的读者不要错过。
        一、数据处理及其发展
        在计算机的所有应用中,数据处理(或称信息管理)占有最大的比重,远远超过科学计算、自动控制、人工智能及作为辅助工具等应用的总和。所谓的数据处理,是指对数据进行收集、存储、分类、计算、加工、检索、传输和制表等处理的总称。数据处理的目的是为了对原始数据进行加工,推导,从而得到我们所需要的有价值的数据。
        计算机化的数据处理经历了三个发展阶段。最早期称为人工管理(或程序管理)数据阶段,要处理的数据交给应用程序直接管理,数据冗余很大,无法让数据共享,数据也不可能长期保存,而且数据必须依附于程序。第二阶段称为文件管理方式,由于计算机软硬件技术的发展,出现了磁盘、操作系统等软硬件,操作系统中的一个专用子系统__文件系统就用于完成对计算机中数据的管理,于是数据管理的任务就交给了计算机,只要我们把数据组织成文件,即可由文件系统进行有效地管理。文件管理比程序管理先进得多,但仍然存在许多问题,特别不适应于大数据量的复杂数据处理。因此数据处理发展到第三阶段,即数据库管理。  二、数据库系统的组成
        数据库管理方式是对一个数据处理系统中所涉及到的所有数据进行全面、统一地管理。从而让数据尽可能的共享,冗余数据极少,且让数据管理与应用程序设计完全脱离。数据库技术是目前数据处理活动中最先进的技术。相应数据库系统也就比较复杂了。数据库系统(DBS)是采用数据库技术,由计算机硬件、软件、数据集合及各类人员组成的一个计算机系统。它由如下一些内容组成。
        ·数据库(DB):存放于外存贮器上以文件形式组织的数据集合。
        ·数据库管理系统(DBMS):专门管理和维护数据库数据的系统软件。同时也是数据库与用户之间的界面。DBMS为数据库系统的核心。
        ·支持数据库工作的计算机软、硬件。
        ·应用程序(AP):对数据库数据进行各种处理的程序。
        ·各类用户:包括系统分析员、系统程序员、应用程序设计员、数据库管理员、终端用户等。
        三、数据模型
        数据库系统所研究的对象是现实世界中的客观事物及这些事物之间的联系。但这些事物及其联系不能以其在现实世界中的形式进入计算机。因此必须对客观事物及其联系进行转换抽象,使其以便于计算机表示的形式进入计算机。我们把在计算机中表示客观事物及及其联系的数据及结构称为数据模型。
        根据描述方法的不同,数据模型分为层次模型、网络模型和关系模型三种。层次模型是以记录数据为结点的树,网络模型是以记录为数据为结点的连通图。它们都得到了实际利用,但这两种模型都缺乏理论基础,以它们建立起来的数据库操作复杂。关系模型采用二维表来表示数据及其联系,结构单一,理论坚实,数据操作方便。因此目前开发的数据库系统基本上都是建立在关系模型之上的。
        
        第二讲  汉字FOXBASE+基础知识
        FoxBASE+是美国Fox软件公司在1986年开发成功的微机多用户关系型 数据库管理系统(DBMS)。汉字FoxBASE+是在FoxBASE+基础上扩充汉字处理功能,能够接收和处理汉字字符数据的软件。早在FoxBASE+面世之前,已经出现了许多种关系型的DBMS,如MINISIS、SYSTEM R、ORACLE、SQL/DS、INGRES、QBE等,这些系统基本上都工作于中、小型计算机。80年代初期,微机开始流行,市场上迫切需要简单易用的微机型关系DBMS。于是,相继有了dBASEⅡ及dBASEⅢ。这两个系统在数据处理领域得到了广泛应用,被誉为“大众数据库”。但dBASEⅢ速度偏低,某些技术指标不够高,功能也不十分全面,FoxBASE+从各个方面超过了dBASEⅢ。
        一、FoxBASE+的主要特点
        FoxBASE+完全兼容dBASEⅢ,可运行于多种软硬件环境,移植性能较好。既可单机运行,也可在多用户环境中运行;既可解释执行,也可以编译执行;既可命令方式,也可以程序方式运行。FoxBASE+可以方便地定义数组和函数。允许同时打开的文件数目及索引文件数目都多于dBASEⅢ,过程文件中的过程数也远多于dBASEⅢ,最多可达128个。
        二、FoxBASE+的运行环境
        FoxBASE+需要在适当的软硬件环境下运行。对硬件的主要要求是内存容量至少要有360K可用,汉字FoxBASE+则至少要有640K。另外最好要有硬盘。操作系统多用MS-DOS或多种汉字操作系统,在运行单用户FoxBASE+时,MS-DOS不能低于2.0版,而在多用户时,MS-DOS要在3.1版以上。FoxBASE+主要由5个文件组成:MFOPLUS.EXE,MFOXPLUS.OVL,FOXBIND.EXE,FOXPCOMP.EXE,FOXHELP.HLP。其中前两个必不可少,最好将这些文件复制到硬盘,通过硬盘启动,方法是在相应目录下敲入文件名MFOXPLUS。FoxBASE+启动成功的提示符是“.”。
        三、FoxBASE+的语言元素
        FoxBASE+是一个DBMS,同时也是提供给用户的语言接口。作为一种语言,FoxBASE+与计算机上的其它语言在基本语言元素上是基本一致的。同样有常数、变量、函数、表达式、命令(语句),控制结构、文件等。只是FoxBASE+中数据类型较丰富,从常数到表达式都存在类型问题。特别应注意字段变量与内存变量的区别。FoxBASE+的系统函数丰富,一方面它增加了语言的描述能力,另一方面也给学习带来一些困难。熟练掌握和灵活使用它们会使我们受益匪浅。
        FoxBASE+中的操作以命令为基本表达手段。FoxBASE+的命令较多,每一命令都能完成一个具体的操作,而程序(命令文件)也是由这些命令及一些控制结构组成的。因此学习FoxBASE+在很大程度上是要掌握这些命令的格式、功能、使用特点,操作过程及对它们的灵活使用。
        
        第三讲  对FOXBASE+库文件的操作
        ? 一.数据库的建立
        使用FoxBASE+进行数据处理,首先就得建立起数据库,FoxBASE+提供了多种建立数据库的方法。最主要的方法是直接建立,用CREATE命令完成,此命令的执行将进入全屏幕编辑状态,在这种状态下可以根据提示分别描述数据库中的各个字段定义,也可以对已作出的定义进行修改。在所有字段(即结构)定义完毕存盘时还可以把记录数据装入库文件。因此CREATE命令可以一次完成数据库结构及数据的建立。
        除开上述的直接建立之处,还可以用COPY TO命令对已有的库文件进行复制而得到另一库文件;或用COPY STRUCTURE复制库文件结构;以及用APPEND FROM命令将文本文件中的数据加载到一个库文件去。如果希望对一个已有的库文件结构作修改,则可用MODIFY STRUCTURE命令,它的执行情况类似于CREATE的执行。
        二.数据库的排序如索引
        在用CREATE命令或其它方法建立起来的数据库文件中,记录的排列顺序一般是自然顺序,即记录进入库文件的先后次序,但在使用库文件时,经常要求以其它顺序来处理记录,为了能满足这一需要,以及在这些有顺序要求的处理中提高速度,FoxBASE+提供了给库文件建立新的记录顺序的手段,一种方法称为排序,另外一种称为建立索引。
        排序和索引虽然都能对库文件建立新的记录顺序,但二者是完全不同的。排序是按某种顺序的记录重新排列,最终生成一个新的库文件(其大小写库文件一样)。索引则是对库文件按某一顺序建立一个索引表,在索引表中规定一条记录的新序号以及它在原库文件中的位置。因此索引是建立一种逻辑顺序,排序是建立一种物理顺序。在实际应用中,排序不可建得太多(因为它要占用较多的物理空间),而索引则可以多建一些。
        三.多个库文件之间的操作
        复杂一点的应用不可能只建一个库文件就能解决问题,而需要建多个库文件。FoxBASE+在内存中开辟出了10个工作区,并且规定在每一工作区中只能打开一个库文件。当我们的应用涉及到多个库文件时,就必然要引起新的操作。主要工作区的选择,库文件之间的联接,均涉及到多个库文件数据的查询及更新。
        选择工作区是因为FoxBASE+中对库文件的操作都隐含是当前工作区中的文件,若要操作另一个在其它工作区打开的库文件,则要调整当前工作区。库文件联接是将两个库文件拼接成一个新库文件,使得原来分散在两个库文件中的某些数据组织到一个库文件中来。联接是实现多库文件操作的一种常用手段。
        FoxBASE+中对库文件的操作还有许多,后面陆续介绍。
        
        第四讲  对FOXBASE+库文件中数据的操作
        ? 数据库中的操作最主要的是数据操作。包括数据的装入、编辑、查询和统计。
        一、数据的查询
        查询是指在数据库中把我们所需要的数据找出来,FOXBASE+提供了两种方式和三个命令完成查询,一种方式为顺序查找,用LOCATE命令(或与CONTINUE联网),将记录指针定位到查找到的记录上;另一种方式为按索引查找,它以索引文件的顺序按关键字进行,最终将记录指针定位于查找到的记录,可以用FIND或SEEK命令完成。顺序查找简单且查找条件比较灵活,但速度低,索引查找速度快但要求事先打开相应索引且查找内容应符合有关要求。
        应当注意,上述几个命令的执行结果都只能定位指针,被查找到的记录并不显示或打印,如想完成输出,应当再使用记录输出命令DISPLAY或LIST,它们能将查找到的记录显示或打印。
        二、数据的增删及编辑
        数据库中的数据不可能一成不变。根据应用的需要或实际情况的变动,数据有可能要作调整。包括追加记录,插入记录,删除记录。对这些操作,FoxBASE+都提供了相应的命令。
        APPEND命令用于追加,它将在库文件的末尾添加上一条或多条记录,其追加的数据是在全屏幕编辑下直接键入的。而APPEDN FROM则用于从另外一个库文件或文本文件中取数据追加到当前库文件中。插入记录可在库文件中的任一位置上进行,用INSERT命令完成。对库文件中无用的文件,可以删除掉,FoxBASE+中的记录删除分两级:一级为逻辑删除,用DELETE命令,它只给被删除记录作上标记,另一级为物理删除,用PACK命令将把已经逻辑删除的那些记录真正删掉。注意逻辑删除的数据可以恢复,而物理删除的记录是无法恢复的。
        FoxBASE+提供了几个命令来用于对数据作编辑修改,包括EDIT、CHANGE、BROWSE、REPLACE和UPDATE。前三个都为全屏幕编辑的命令,可以在屏幕上看得见数据的情况下进行修改、插入及删除数据。而REPLACE则用于对某个记录范围的同一字段值作成批的替换,在某些情况下特别有用。UPDATE包含REPLACE的功能,同时它还能利用其它库文件中的数据来修改当前库文件中的数据。
        三、库文件数据的统计
        查询和统计是数据库应用中的核心操作。统计不是要在库文件中找出单个的数据,而是要得到一组数据的统计信息。FoxBASE+中的统计操作包括计数(COUNT命令),数值型字段求平均值(AVERAGE命令),数值型字段求总和(SUM命令)及对记录作分类汇总(TOTAL命令)。
        TOTAL命令将把库文件中的某些记录合并成一条记录,并将这一组记录中的数值型字段值分别求和,并以这些求和的值作为合并起来的那一条记录中对应字段的值。因此TOTAL命令为数据的简单汇总提供了一个方便的手段。
        
        第五讲  FOXBASE+的其它操作
        ? FoxBASE+中除了提供大量的操作库文件和数据的命令外,还有众多的其它操作命令,包括输入输出数据的命令,内存变量和数组操作的命令,文件管理操作命令以及一些辅助命令。
        一、输入输出命令
        在FoxBASE+的使用中,经常有非数据库数据的输入输出以及数据库数据有格式的输入输出。在没有格式要求下输出表达式值时,可用?或??命令,无格式的单个数据输入可用WAIT,ACCEPT和INPUT命令,这三个命令被称为交互式数据输入命令,因为它们可以提供提示信息,输入的数据存入一个内存变量,它们常用于程序方式下。如果对输入输出数据有严格的格式要求,则使用@…SAY和@…GET命令,它们可以给输入输出数据规定严格的屏幕格式,通过它们能够使屏幕输入输出界面友好而灵活,一般说来,它们也是用在程序方式下。
        二、数组和内存变量的操作
        在FoxBASE+的应用中,尤其是在程序执行方式中,经常要对一些原始数据,中间结果和最终结果作临时保存或长期保存,这需要使用非数据库的变量。同时在程序控制中,如选择循环控制等,也需要使用变量。因此FoxBASE+提供了内存变量,与dBASE的显著区别是FoxBASE+还直接提供了数组功能,并且数组与内存变量被同等看待,有关数组及内存变量的操作主要是赋值、显示、保存、恢复及清除,必须注意数组应当先定义后使用,且只能定义一维或二维数组。
        三、其它辅助命令
        为了使用方便,FoxBASE+提供了许多辅助命令,其中包括几个文件管理命令,如列文件目录(DIR命令),更改文件名(RENAME命令),文件复制(COPY FILE命令),文件删除(ERASE/DELETE命令)、输出文本文件(TYPE命令)等。这些命令与DOS中的相应命令在格式上及功能上都是相同或相似的,提供这几个命令的好处在于能让用户在FoxBASE+的环境中进行文件管理,而不必返回到DOS下进行。同时FoxBASE+中还提供了RUN/!命令,可以间接运行操作系统级的其它命令。
        
        第六讲  FOXBASE+的函数
        ? 在FOXBASE+中,函数是完成各种特定操作的重要手段。在程序设计中灵活利用函数可以扩展和增强FOXBASE+中各类命令的功能,提高程序的质量和设计效率。这些函数与数学上的函数在概念上是一致的。一般的书写格式是:函数名(自变量表)。少数函数的自变量表是空的,注意这种无参数的函数在书写时必须写上圆括号,如DATE(),SELECT()等。唯一例外的是宏代换函数&,它后面必须写上一个字符型的变量作参数但却不用圆括号。
        每一个FOXBASE+的函数都能返回一个结果值,但参数的类型与函数值的类型并非都是一致的,所以有关函数中的数据类型是我们在学习中应当关注的一个方面。
        FOXBASE+提供了100个左右的函数,具体数目在各个版本中有所差异。这些函数按功能或用途被分为日期和时间函数、数值运算函数、字符操作函数、类型转换函数、测试函数、系统环境函数和多用户函数七类。此外FOXBASE+还允许用户自己定义函数,称为用户自定义函数。
        日期和时间函数包括DATE,TIME,DAY,MONTH,YEAR,DOW,CDOW,CMONTH等,这类函数中DATE和TIME是无参数的,其余函数都有一个日期型的表达式作为参数,返回结果主要是数值型数据,只有CDOW和CMONTH返回英文词汇。
        数值运算函数包括ABS,INT,ROUND,MAX,MIN,MOD,SORT,EXP,LOG等。这类函数用于完成常见的数值运算,参数基本上都是数值型表达式,函数值也为数值型。
        字符操作函数包括&,AT,SPACE,REPLICATE,LEFT,REGHT,SUBSTR,TRIM,RTRIM,LTRIM,STUFF,TRANSFORM等。这类函数的操作对象是字符型数据,参数和结果的类型多为字符型。其中宏代换函数&是一个特别有用的函数,应当重点掌握。
        转换函数包括LOWER,UPPER,VAL,STR,CTOD,DTOC,CHR,ASC等。分别用来进行英文字母大小写转换,数值型和字符型数据的转换,字符型和日期型数据的转换,字符和ASCII码的转换。
        测试函数包括LEN,RECSIZE,RECCOUNT,FCOUNT,SELECT,DBF,ALIAS,NDX,LUPDATE,FIELD,RECNO,FILE,BOF,EOF,DELETED,ISSALPHA,ISLOWER,ISUPPER,TYPE,UPDATE,FOUND等。这类函数用于在数据库中对各个范围的数据进行测试,主要测试对象是文件、字段、记录、字符数据以及格式编辑、查找、删除等操作的结果状态。这类函数的参数几乎都是数值型,函数值主要是逻辑型和数值型,其中BOF和EOF是程序设计中对库文件记录循环处理时最为有用的两个控制条件。
        系统环境函数包括OS,VERSION,GETENV,FKMAX,FKLABEL,DISKSPACE,ISCOLOR,ROW,COL,PROW,PCOL,IIF,MESSAGE,ERROR,INKEY,READKEY,SYS等。这类函数用于测试系统的当前环境,返回各种系统信息,如操作系统信息,功能键信息,磁盘空间信息,当前坐标信息,错误信息,动态按键信息,全屏幕退出信息等。
        
        第七讲  FOXBASE+的命令文件
        ? FOXBASE+的命令文件即是FOXBASE+的程序。这些程序是根据需要由各种FOXBASE+命令按一定顺序组成的。同时,每个程序都有一个文件名及相同的扩展名.PRG,正因为如此,才把程序称为命令文件。在命令文件中,命令也常称为语句。FOXBASE+提供两种工作方式:命令方式和程序方式。命令方式简单,直观,交互性好,但效率低,不能连续自动执行。因此在需要解决复杂问题时,要先设计好命令文件,以程序执行方式来解决问题。
        一、程序流程的控制
        用前面介绍过的各种命令(语句)只能设计出顺序执行的程序,而多数问题是不能仅用顺序程序解决的,必须要对程序流程进行控制。流程控制主要是选择和循环语句,这些语句只可用于程序方式。
        1.条件语句(选择结构)。即IF_ENDIF或IF_ELSE_ENDIF语句,用于二分支情况下的流程选择。
        2.多重判断语句(判断选择)。即DO CASE_ENDCASE语句,用于多路分支情况下的流程选择。虽然用IF语句的嵌套也可以实现此控制,但DO CASE语句更加直观,易于使用。
        3.循环语句。即DO WHILE_ENDDO结构。它可以根据DO WHILE后面的逻辑表达式(循环条件)控制一个语句序列(循环体)重复执行,直至循环条件为逻辑假时中止循环。FOXBASE+中循环比较灵活的一点是可以在循环体中使用LOOP语句控制进行下一次重复(称为循环短路),使用EXIT语句可强制中止循环,它们一般都用在循环体内嵌有选择结构的情况下。当然上面几种控制语句是可以相互嵌套的,但必须要符合嵌套规则,不可出现控制交叉。
        二、命令文件的建立、调试和运行
        FOXBASE+的命令文件是ASCII码文件,可以用多种文本编辑软件或字处理软件来建立和编辑,如EDLIN,WS,WPS等。为了用户使用方便,FOXBASE+自己也提供了一个文本编辑器。用户可使用它建立、编辑命令文件。方法是用编辑命令MODIFY COMMAND或MODIFY FILE。FOXBASE+的文本编辑器工作于全屏幕编辑环境下,因此命令文件的编辑是比较容易的,但它不能编辑较大的文件,当文件超过64K时将造成信息丢失,此时可用其它软件编辑。
        复杂的程序在编辑完成后不可立即运行,应当先进行调试,以便检查出程序中存在的错误并纠正。程序的调试可以使用多种技术手段。FOXBASE+为方便用户的调试工作,提供了一组调试命令,如SET TACK ON/OFF,SET STEP ON/OFF,SET ECHO ON/OFF,SET DEBUG ON/OFF,SUSPEND等,用这些命令用户可以在调试程序时跟踪程序运行,对照检查被执行命令行与执行结果以及挂起处理等。
        命令文件可以解释执行或编译执行。在解释执行方式下,命令文件是没有经过编译的,其扩展名为.PRG,解释方式对命令文件一边翻译一边执行,效率较低。编译方式的执行效率要高些,但必须先编译命令文件,编译工作由FOXBASE+的批编译程序完成,其命令是FOXPCOMP,编译后的命令文件以.FOX作扩展名。不管是以解释方式还是以编译方式执行命令文件,均用命令DO后跟命令文件名实现。DO命令执行时,首先寻找是否有.FOX文件,有则以编译方式执行,否则以解释方式执行.PRG文件。
        三、过程及过程文件
        FOXBASE+的程序设计是模块化结构程序设计。通常将若干程序分别设计,每个过程实际上还是一个命令文件,仍用上述方法建立,但每个过程以PROCEDURE〈过程〉开头,以RETURN语句结束。这样各个过程可以相互调用且能自动返回。采用这种方法的应用程序由若干个模块组成,构成一个层次结构。这不仅使得应用程序易于设计,也便于阅读和修改。但是每一个过程均为一个命令文件,在一个应用程序执行时,可能会大量调用过程,每调用一个过程执行都等于是打开一个文件,而FOXBASE+中对打开文件数目是有严格限制的,同时频繁地调用过程会使程序执行效率降低。为解决这个问题,FOXBASE+中可以将若干(最多128个)过程组织成一个过程文件保存于磁盘,用SET PROCEDURE TO命令打开过程文件即可将其中包含的所有过程同时打开,这能有效地降低打开文件数目和提高程序执行效率。过程文件的建立方法与前述命令文件建立方法一样。
        
        第八讲  FOXBASE+的参数设置和系统配置
        ? FOXBASE+有许多的运行参数和开关,它们能够控制FOXBASE+的工作过程以及和用户的界面关系。这一些参数和开关都有系统的隐含值,根据需要可以对它们进行重新设置。这些参数值或配置可以对键盘输入、屏幕输出、打印机输出、文件操作、数据库操作、程序调试、系统状态及运行结果等进行控制。熟练掌握它们对使用FOXBASE+,充分发挥FOXBASE+的功能有很大的帮助。
        参数设置和系统配置可以用三种方法进行。一种是用单个的SET命令,每一个SET命令对一项参数作出设置。这些SET命令有两种格式:一种格式是SET…ON/OFF,称为开关类参数设置,另一种格式是SET…TO…,称为值参数设置,TO后面要跟上确定的参数值。
        第二种参数设置方法是执行参数设置的菜单驱动命令SET(直接回车,后面不跟任何内容),屏幕上将出现一个SET菜单,根据需要由屏幕上的提示进行各项参数的设置。
        第三种参数设置方法是修改FOXBASE+的系统配置文件CONFIG.FX。因为每次启动FOXBASE+,均要自动检查CONFIG.FX文件并以此文件中的参数说明为隐含值。CONFIG.FX文件由若干行组成,每一行的格式是:〈项〉=〈值〉。CONFIG.FX文件可由各种文本编辑软件建立和修改。用CONFIG.FX文件放置参数与用SET命令设置参数是有一定差别的。用SET命令设置的参数只在设置的当前这一次运行FOXBASE+中有效,一旦退出FOXBASE+,SET设置即失效,各参数恢复成原初始值,而用CONFIG.FX放置的参数值就是系统的初始参数值,因此可称SET设置为动态设置,CONFIG.FX为静态设置。另外如内存变量的最多数目,打开文件个数等只能用CONFIG.FX说明,无法用SET命令完成。
        有关各项参数的名称,取值范围及隐含值请读者查阅各种FOXBASE+的书籍和资料。
        在使用FOXBASE+的过程中,如果想知道系统当前状态和各项参数的设置情况,可以使用FOXBASE+的状态显示命令LIST STATUS或DISPLAY STATUS。
        
        第九讲  FOXBASE+的编程技巧
        ? FoxBASE+的程序设计与其它高级语言一样,也存在一些技巧。下面介绍其中的几个方面。
        一.菜单设计技巧
        在FoxBASE+这种模块化的程序设计当中,一般采用菜单技术给用户提供操作界面。菜单的设计实际上要做两个方面的工作,一是在屏幕上构造一个菜单画面,二是给用户提供选择的手段。FoxBASE+提供了建立各种类型菜单的功能。大致有如下几种:
        1.普通选项式菜单,一般用屏幕格式输入输出语句@…SAY及@…GET书写,用多个@…SAY在屏幕上构造菜单,然后用@…GET让用户回答选择。这种菜单也可以用?输出命令与交互式输入语句WAIT等书写。
        2.亮条式菜单。亮条菜单中的选择是动态的,用户可在菜单中的各项之间移动,由覆盖一个菜单项的光带(亮条)标明当前位置,当亮条覆盖于我们所需的菜单项上时,按回车键即为选中。亮条菜单由多个@…PROMPT…语句构造,并且必须用MENU TO语句激活。
        3.弹出式菜单。这种菜单的特点是它格在屏幕原有的显示基础上弹出一个方框形的菜单,并且覆盖住这一区域的原有显示。当用户在菜单中进行挑选后,此菜单消失,相应区域的屏幕恢复原有显示。弹出式菜单中的各项是纵向排列的,并且也有一亮条标明当前位置,用户可以上下移动此亮条,选中的方法仍然用回车。建立弹出式菜单用@…MENU…语句,激活些菜单用READ MENU TO语句。
        4.下拉式菜单。这种菜单具有二维结构,由屏幕顶部的一组主菜单条(水平排列)和每一主菜单条下的一组下拉菜单项(垂直排列)组成。当一个下拉式菜单工作时,用左右移位键可以把亮条移到所需的某一主菜单条上,此时,这一主菜单条下的那一组下拉菜单项便醒目地显示出来,而其它各列的内容则不显示,然后用户使用上、下移位键使亮条到达所需的那一个下拉菜单项上,最后用回车选中。下拉式菜单用MENU BAR和MENU…语句构选,其中前者建立主菜单,后者每用一次就将一组下拉菜单项装配到一项主菜单下,激活下拉式菜单用READ MENU BAR TO语句。
        二.宏技术应用技巧
        灵活使用FoxBASE+提供的宏代换函数“&”可以增加程序的灵活性和通用性,减少程序编写量。它的主要应用包括:①以少代多。对于语句中经常要用到的一长串字符,用&函数代换。②编写通用程序。用一字符型内存变量接受键盘上的字符串输入,在需要用此输入内容的地方则用&函数作代换,这使得相应语句能根据输入的变化自动调整,而程序却无变化。③代替语句的一部分。
        三.容错设计技巧
        为了尽可能地排除程序中因各种原因造成的错误带来的不利影响,程序设计中最如考虑程序自己的容错处理能力。常见的方法是测试法和陷阱法。测试法借助FoxBASE+提供的各种测试函数,在程序中以测试结果作为依据,决定后续操作,在测试发现错误时,即可给出错误信息,以便修改。陷阱法是用FoxBASE+中的ON ERROR语句设置错误陷阱,一旦发生错误,即可用某些测试函数了解出错情况,并给出相应的错误信息?
        
        第十讲  多用户功能
        FOXBASE+可工作于单用户及多用户环境下。在多用户环境中,随时都可能出现多个用户同时对相同数据(文件或记录)进行操作,即所谓的并发操作。由于一些并发操作会来带来数据的不一致性问题,因此当FOXBASE+工作于多用户环境下时,必须要对并发操作加以控制管理。
        控制并发操作的最常用技术是封锁。封锁的基本思想是当一用户对某数据进行操作时,不允许其它用户对此数据进行任何操作或某一些操作。由于可见,封锁存在级别,在多用户环境中使用FOXBASE+,用户应根据需要选择封锁级别。
        在FOXBASE+中,对数据的封锁有好几种方式,同时也有各自的封锁范围和级别。这些方式包括:
        1.对数据文件以独占方式加锁。
        两个语句可以完成这种封锁,SET EXCLUSIVE ON和USE…EXCLUSIVE。前一语句可以封锁若干个数据库文件,由SET EXCLUSIVE ON开始直至SET EXCLUSIVE OFF之间打开的所有库文件皆被独占加锁,其它用户不能对这些库文件进行任何操作。可见这种封锁范围大、级别高。USE…EXCLUSIVE ON开始直至SET EXCLUSIVE语句则只对打开的这一个库文件独占加锁,对前后打开的库文件没有影响。
        2.对文件或记录建立“写”封锁
        上面独占方式加锁使得FOXBASE+的并发程序和共享性变得很差,封锁范围越大,问题越严重。另外一种封锁方法对并发操作的影响小得多,这种方法称为“写”封锁。“写”封锁只对要进行修改操作的数据加锁,而且其它用户仍然可以读取这些数据,只是无法修改它。这种“写”封锁可以在修改操作完成以后立即解锁。因此“写”封锁可以提高系统的并发度,但不能保证前后两次读同一数据得到的值相同。(因为在两次读之间有可能另一用户对此数据加“写”锁并修改了它的值)。
        “写”封锁可以加在两种范围上:文件“写”封锁和记录“写”封锁。建立“写”封锁可以用两种方法完成。一种是通过函数建立“写”锁。这类函数有文件加锁函数FLOCK(),记录加锁函数RLOCK()或LOCK(),解除“写”封锁函数UNLOCK。另外一种加“写”锁是由FOXBASE+自动建立的,由于有许多FOXBASE+的命令只有在封锁方式下才能可靠执行,因此当这些命令执行时,FOXBASE+自动检查要操作的记录或文件是否已加上“写”锁,如果没加上则由系统加上,当相应的命令执行完后又自动释放封锁的记录或文件。
        另外,还有一类FOXBASE+命令只读取库文件中的数据,它们的执行不需要对任何数据进行封锁。因此用户在多用户环境下使用FOXBASE+时,应当根据实际需要和要求来确定封锁的范围及级别,在程序设计中应当善于使用加锁函数。