Foxbase程序设计中常用的五种出错处理方法

Author: Date: 1996-09-13

        一、定义输入格式:
        格式显示语句可限制输入数据的范围,从而避免错误的输入:
        例:a=30
        @6,20 say '文具价格:' get a range 20,50
        read
        执行上面语句,屏幕显示:文具价格:30.00
        光标停在30.00处,等待用户输入新的数据,如果输入的数据范围不在20~50之间,系统拒绝接受,直到输入范围内的值为止。
        二、打印机未联机出错处理:
        当程序执行打印而打印机未联机时也会使应用程序中断,为防止此现象出现,可通过程序检测打印机状况,并提醒用户。Foxbase+有个系统函数sys(13)可用于测试打印机,在DOS系统下,如果打印机没有准备好,函数返回“offline”值,如果打印机准备好,函数返回“ready”值。
        例:打印机测试程序:
        k=' '
        if sys(13)='offline'
        set cons off
        ? chr(7)+chr(7)+chr(7)
        set cons on
        @8,20 say '打印机未准备好,要打印吗(y/n)' get k
        read
        if k='y'
        do <打印程序>
        endif
        endif
        return
        三、重写文件处理:
        在数据库处理过程中,常会改变数据库的索引文件,当改变索引文件时,系统会提问“××文件已存在,要覆盖它吗?(y/n)”,从而影响界面的美观。为了避免此现象,在程序中可用语句set safety off设置为重写不保护。
        四、磁盘满测试:
        在备份数据库文件时,如果磁盘容量不够,系统会中断程序并显示错误信息,使程序执行不下去。为了避免此种现象,可用程序检测磁盘容量,与数据库字节的大小比较,再根据比较的情况是否进行数据库备份。
        例:磁盘满测试程序:
        bn='y'
        do while .t.
        use cpk
        g12=34+32*fcou()+recs()*recc()
        set defa to a:
        g13=diskspace()
        set defa to c:
        if g12>g13
        clear
        g14=' '
        @09,40 say '磁盘空间不够,请换一新盘。'
        @11,40 say '按Y键继续,按N键退出。' get g14
        read
        if g14='n'
        exit
        endif
        endif
        copy to a:cpk.dbf
        enddo
        return
        说明:g12为计算数据库占用磁盘空间大小的公式,其中34个字节指文件头整体说明32个字节+字段结束标志0DH 1个字节+文件结束标志IAH 1个字节;32个字节是文件头结构中每个字段说明的长度,函数fcou()是测算数据库有多少个字段,函数recs()是测算每个记录的长度为多少,函数recc()是测算数据库有多少个记录。函数diskspace()是测算磁盘剩余空间为多少字节,但用此函数测算时,必须先将当前盘转到A盘。比较上面的两个测算结果,如例中的g12和g13,便可知道你的磁盘是否装得下要备份的数据库,并提示给用户选择。
        五、使用命令on error do <程序>:
        命令on error do <程序>表示当应用程序出现错误时,转去执行该命令后面的程序,从而可以避免程序中断,使程序出现错误后重新返回应用程序。可以说该命令是万能的出错处理命令,但当程序出错过多时,会出现打开的文件过多,因为该命令不会释放调用的程序,所以其它出错方法还是要多用。