C-dBASEⅢ SET FILTER TO的使用
C-dBASEⅢ中,SET FILTER TO命令执行后,并不改变当记录指针,因此当前记录不一定是满足过滤条件的第一个记录。
例如:有一工资数据库GZ.DBF
USE GZ
BROW FIELDS编号,姓名,单位,职务工资
编号 姓名 单位 职务工次
A001 刘军 A 110.00
A002 陈成 A 120.00
A003 赵卫国 A 100.00
B001 张强 B 100.00
B002 李新 B 90.00
B003 王刚 B 130.00
SET FILTER TO 单位=‘B'
BROW FIELDS编号,姓名,单位,职务工资
A001 刘军 A 110.00
B001 张强 B 100.00
B002 李新 B 90.00
B003 王刚 B 130.00
对当前记录进行操作的命令,会出现将不满足条件的记录也进行操作的情况。如果在命令文件中遇到这种情况时,运算结果将会出现差错。
例如,将上面工资 数据库中的数据按单位输出,利用下面程序输出“B单位时即会出错。
……
USE GZ
@5,10 SAY'请输入单位:'GET DW
READ
SET FILTER TO 单位='&DW'
SET DEVICE TO PRINT
DO WHILE .NOT.EOF()
@PROW()+1,5 SAY编号+姓名+STR(职务工资,6,2)
SKIP
ENDDO
……
为了避免这种情况的出现,可以先进行记录定位,将记录指针指向满足条件的第一条记录,然后再利用过滤条件进行过滤,这样即可克服过滤条件不改变当前记录指针的缺陷。
如在上面程序中的过滤条件前加一条语句:
LOCA FOR单位='&DW'即可使程序正确运行。
(河北 王文会)