主题:[原创]如何理解宏代换& (看者受益)
vfp123456
[专家分:1020] 发布于 2005-04-22 11:16:00
宏代换&是一个功能强大的函数,它有代换、计算等作用。
AA='ABCDE'
?&AA
?'&AA'
上面这两个显示语句是否都有执行?如果有不能执行的,为什么?
如何理解宏代换&? 我们知道1,2,3与一,二,三表达的内容是一样的,只是写法不同。那么,&AA就可以看成是ABCDE的另一个写法,在程序中遇到&AA就可以用ABCDE去替换,替换后,你就可以看明白了。用此方法,回答上面的问题,答案就一目了然了。
应用例子:
FOR N=1 TO 30
NS=ALLTRIM(STR(N))
THISFORM.CHECK&NS..ENABLED=.T.
NEXT
AA=‘姓名'
bb='李明'
replace &aa with &bb
fors='姓名="李" and 工资>800'
select * from gz where &fors
dd='disp memo like ??'
&dd
回复列表 (共16个回复)
沙发
我为它狂 [专家分:480] 发布于 2005-04-22 12:32:00
这位大哥,你是来讲课的吧?
板凳
lwh1188 [专家分:25840] 发布于 2005-04-22 12:55:00
三人同行,必有我师!
3 楼
冰力 [专家分:200] 发布于 2005-04-22 14:07:00
我们论坛就是需要这样的gg!![em1]谢谢了!!
4 楼
mrtorney [专家分:1060] 发布于 2005-11-02 21:08:00
我是这么使用宏代换的:
假如一个表格中有f1,f2,...fn个字段,需要将某数组进行赋值,则写成:
for i=1 to n
cDo="Replace f"+allt(str(i))+" with aNum[i]"
&cDo
next
十分好用.
5 楼
ssnail [专家分:0] 发布于 2005-11-04 18:18:00
新手叩谢:
谢谢,我正在愁如何让一个Form里面所有的text都有一样的属性,现有我知道怎么办了:
FOR i=1 TO 10
N=ALLTRIM(STR(i))
thisform.text&N..borderstyle=0
ENDFOR
只是我不明白为什么&N后面要加两个点,谁可以告诉我?
请问我们这里有没有QQ群可以加入的,这样有什么问题可以随时请教的呢?
我的QQ是:125287559,如果有愿意带带新人,请加我。
6 楼
wuzhouhong [专家分:10890] 发布于 2005-11-04 18:30:00
&N后面要加两个点:
第一个点是标志宏替换的结束,第二个点是表示xx属性
7 楼
wuzhouhong [专家分:10890] 发布于 2005-11-04 18:38:00
除了使用Set Filter to &cCont 语句和调用外部命令传递参数RUN xxx.exe &Para1 , &Para2外
我绝不使用宏替换,因为宏替换是完全的字符意义代换,替换后要重新解释、编译(效率极低),而且程序编译时不能检查语法错误,实际替换时极有可能出错,降低了程序的健壮性。
实际中使用()表达式更有效一点,例如:
cDBFNAME="abc.dbf"
use (cDBFNAME)
copy to (cDBFNAME)
append from (cDBFNAME)
...
...
...
8 楼
wuzhouhong [专家分:10890] 发布于 2005-11-04 18:47:00
对于5楼问题,不使用宏替换,也可以(5楼方法,如文本框不是以text开头,是要出错的!)
FOR m.I=1 TO thisform.ControlCount
IF thisform.Controls(m.I).BaseClass="Textbox"
thisform.Controls(m.I).borderstyle = 0
Endif
ENDFOR
9 楼
DXHGP [专家分:780] 发布于 2006-04-27 23:35:00
顶
10 楼
lxhong1979 [专家分:100] 发布于 2006-05-03 21:30:00
当然要学习一下了!
我来回复