VisualFoxpro宏替换地运用计算机二级考试

文章作者 100test 发表时间 2009:06:15 16:25:55
来源 100Test.Com百考试题网


  假设我们有两个表, 1997 级学生成绩表( 1997.DBF )和 1999 级学生成绩表( 1999.DBF )。这时我们要求用户在浏览表之前先输入年份,以便我们来打开用户指定年度的学生成绩表。也许你会说: “ 这太容易了,俺会呀 ” 然后给出下面的方案:
  先用一个文本框来接收用户的输入的年份,然后调用下面的代码来打开表:
  DO CASE
  CASE THISFORM.TEXT1.VALUE = 1997
  USE ‘1997.DBF
  CASE THISFORM.TEXT2.VALUE = 1999
  USE 1999.DBF
  ENDCASE
  BROW
  不错,您的这段代码表面上是达到了要求。但是它存在着几个问题:
  问题 1 :当学生成绩表很少时(如:上例只有 1997.dbf 和 1999.dbf 两个表),用上面的代码可以轻松摆平。但是如果表很多时,假设有十个年度的学生成绩表( 1980.DBF---1990.DBF )。这下惨了,代码就会变成下面的样子:
  DO CASE
  CASE THISFORM.TEXT1.VALUE = 1980
  USE 1980.DBF
  CASE THISFORM.TEXT2.VALUE = 1981
  USE 1981.DBF
  CASE THISFORM.TEXT2.VALUE = 1982
  USE 1982.DBF
  CASE THISFORM.TEXT2.VALUE = 1982
  USE 1982.DBF
  ……
  ……
  ENDCASE
  这样一来代码非常的冗长。但这还不是最糟的,更惨的在下面(天啊~~)。
  问题 2 :当随着学生的升学,用来保存学生每年学习成绩的表也会动态的增加,这时上面的代码就完全失去了做用。用上面的代码无法预先知道到底会有多少个学生成绩表,也就不可能事先设 N 个 CASE 来判断年份了。
  宏替换 :“不要担心,少要害怕,考试#大提示 宏替换 ”。 宏替换 是 FOXPRO 为我们提供的一项强大的功能。它的运算符是“ &. ”,作用就是提取字符串的现值,返回值是字符串常数。
  看到这里您的第一反应可能会是: “WHAT? 什么乱七八糟的,你说的是什么意思? ” 。
  别忙,接着往下看您就明白了。下面就让我们用 宏替换 功能来完成上面例子的功能,是又好又省事儿。这次假设我们有 20 个表( 1980.DBF 一 2000.DBF )分别存放每一年的学生成绩,放心我们绝对不会用 20 个 CASE 的:
  C_YEAR = THISFORM.TEXT1.VALUE &.&.用变量 C_YEAR 来接收用户输入的年份。
  USE &.C_YEAR
  *上面这一句利用宏替换来根据 C_YEAR 的值来找打开对应的表,等价于
  *Use ‘1999.dbf,只不过引号的表名是随 C_YEAR 的值而变罢了
  BROW
  搞定,收工。嘿。。。。。。。。怎么样,是不是又省时又省力呀?
  再看下面的例子:
  a=b
  b=庄稼
  ?a &.&.显示的结果是“b”
  ?&.a &.&.显示的结果是“庄稼”
  也就是说宏替换将当前变量的值作为真正需要的变量,并返回这个变量的值。
  a=1997.dbf
  use a
  这样就成了打开 a 这个表,这时就必须用宏替换,
  use &.a
  类似的还有当 locate for 后面跟的条件不是固定的,你的程序可以允许操作者选择不同的字段来查询,可能是:
  姓名=...
  也可能是:
  电话=...
  你不能直接把 for 后面的内容整个作为一个变量,这时宏替换也可以起作用,你可以把条件整个放入一个变量,比如字段名放在一个变量中 zdm,要查的内容放在 nr:
  tj=zdm "" nr ""
  locate for &.tj
  如果这时 zdm=姓名,nr=庄稼,这就相当于:
  locate for 姓名=庄稼
  那么只要 tj 的内容是个正确的逻辑表达示,不论是什么内容都可以运行,这将给编程带来很大方便。
  多学一招
  你甚至可以把整条语句放入一个变量:
  tj="locate for " zdm "" nr ""
  &.tj
  注意
  值得注意的是, 宏替换 &. 不能递归的引用自已。比如下面的用法就是错误的:
  STORE “&.ZL” TO ZL
  ?&.ZL
  赋值语句与 宏替换 巧妙地组合,能实行灵活的查询和程序控制,提高程序通用性,使程序更加简练,运行效率更高,龙其在处理一些不确定对象时, 宏替换 将扮演非常重要角色。
  最后补充一点,虽然 宏替换 功能强大,但是也不要太频繁使用,正是由于 宏替换 灵活性,使得它执行时要进行一些转换,如果太多的使用 宏替换 可能会影响程序的性能。
  所以在一些不是必须的场合下,尽量避免使用 宏替换 , 就象好吃的东西吃得多了也会起腻一样, 宏替换 用的太多也会使你的程序不舒服的。

相关文章


运用VisualFoxPro地ProgressBar控件计算机二级考试
运用VisualFoxPro地CommonDialogs控件计算机二级考试
二级辅导:VisualFoxpro类计算机二级考试
VisualFoxpro数组地运用计算机二级考试
VisualFoxpro宏替换地运用计算机二级考试
VisualFoxpro配置文件计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛