微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题C——dBASEⅢ SET FILTER TO的使用
栏目软件操作与技巧
作者河北 王文会
发布1994-12-16
  在一定范围内对数据库中的记录进行操作,可以利用FOR来指定命令的有效范围。在同一范围内进行多种数据操作时,利用过滤条件过滤后再进行各种操作,不必每次都使用FOR来指定范围,使用起来具有明显的优点。但是,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'即可使程序正确运行。
  (河北 王文会)