论坛登陆 注册 文章专区 投稿文章 旧版浏览
首页 | 页界资讯 | 安全动态 | 网络应用 | 组网技术 | 软件应用 | 工具软件 | 网管知识 | 帮助
文学 | 操作系统 | 注 册 表 | 编程语言 | 数 据 库 | 服 务 器 | 网页设计 | 图形图象 | VIP
论坛 | 网络安全 | 安全防范 | 黑客技术 | 硬件学堂 | 路由技术 | 搜索研究 | 站长经验 | 投稿
专题 | 教育频道 | 特色专题 | 精文荟萃 | 聊天通讯 | 网络文学 | 论坛社区 | 广告服务 | 旧版
设为首页 加入收藏
当前位置:首页>>文章>>数据库>>FoxPro>>正文

Foxpro 宏替换的应用

www.xker.com 作者:不详 来源:网络转载 加入日期:2005-11-18 7:31:11
Foxpro 宏替换的应用:

这一章我们来学习 FOXPRO 的一个十分强大而又非常容易掌握的功能: 宏替换 。就从名字上看来这不是个容易对付的家伙,在开始讲 宏替换 之前,让我们先来看一看这样的一个例子:

假设我们有两个表, 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 &&显示的结果是“庄稼”

也就是说宏替换将当前变量的值作为真正需要的变量,并返回这个变量的值。

VFP 的很多命令的某些地方不能使用变量,比如上面的 use 命令,你不能写成:

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

赋值语句与 宏替换 巧妙地组合,能实行灵活的查询和程序控制,提高程序通用性,使程序更加简练,运行效率更高,龙其在处理一些不确定对象时, 宏替换 将扮演非常重要角色。

最后补充一点,虽然 宏替换 功能强大,但是也不要太频繁使用,正是由于 宏替换 灵活性,使得它执行时要进行一些转换,如果太多的使用 宏替换 可能会影响程序的性能。

所以在一些不是必须的场合下,尽量避免使用 宏替换 , 就象好吃的东西吃得多了也会起腻一样, 宏替换 用的太多也会使你的程序不舒服的。

上一篇:Foxpro 程序的测试与调试
下一篇:Foxpro 子程序和函数

关闭窗口】【浏览次数:】【发送给好友】【收藏此页
相关文章 最新文章 热门文章

·个人SMTP服务器的配置
·通过E-mail 共享Java 对象
·你的email服务器准备好应对账号搜集攻
·Server 2003中为SNMP服务配置网络安全
·Server 2003为SMTP邮件中继服务器配置
·不花一分钱, 轻松打造自己的电子邮局
·用CMailServer打造邮件服务器
·G容量邮件服务器DIY
·Exchange 2000 Server的常见问题
·用Windows Server 2003架设小型邮件服
·系统优化 专题
·QQ密码丢失后能做的事情:快速找回密码
·最经典的黑客入门教材
·怎样查找对方的IP地址
·找回QQ密码的注意事项 
·实战系统虚拟利器——MS VPC 2004
·DMA让你的硬盘速度飞起来
·电脑初学者必备之Windows进程大全
·Dreamweaver视频教程
·让你的网速快到不可思议
评论 本站声明
【注】 发表评论必需遵守以下条例:
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
  • 本站大部分为网络转载,如有版权问题,请通知我们,我们立即更正!

设为首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyright © 2003-2005 xker.com All rights reserved. 网站合作、广告联系QQ:12231446
小新技术网 冀ICP备05002857号