回 帖 发 新 帖 刷新版面

主题:[原创]如何理解宏代换&   (看者受益)

宏代换&是一个功能强大的函数,它有代换、计算等作用。
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个回复)

沙发

这位大哥,你是来讲课的吧?

板凳

三人同行,必有我师!

3 楼

我们论坛就是需要这样的gg!![em1]谢谢了!!

4 楼

我是这么使用宏代换的:
假如一个表格中有f1,f2,...fn个字段,需要将某数组进行赋值,则写成:
for i=1 to n
  cDo="Replace f"+allt(str(i))+" with aNum[i]"
  &cDo
next
十分好用.

5 楼

新手叩谢:
谢谢,我正在愁如何让一个Form里面所有的text都有一样的属性,现有我知道怎么办了:
FOR i=1 TO 10
    N=ALLTRIM(STR(i))
    thisform.text&N..borderstyle=0
ENDFOR
只是我不明白为什么&N后面要加两个点,谁可以告诉我?
请问我们这里有没有QQ群可以加入的,这样有什么问题可以随时请教的呢?
我的QQ是:125287559,如果有愿意带带新人,请加我。

6 楼

&N后面要加两个点:
第一个点是标志宏替换的结束,第二个点是表示xx属性

7 楼

除了使用Set Filter to &cCont 语句和调用外部命令传递参数RUN xxx.exe &Para1 , &Para2外

我绝不使用宏替换,因为宏替换是完全的字符意义代换,替换后要重新解释、编译(效率极低),而且程序编译时不能检查语法错误,实际替换时极有可能出错,降低了程序的健壮性。
实际中使用()表达式更有效一点,例如:
cDBFNAME="abc.dbf"
use (cDBFNAME)
copy to (cDBFNAME)
append from (cDBFNAME)
...
...
...

8 楼

对于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 楼

10 楼

当然要学习一下了!

我来回复

您尚未登录,请登录后再回复。点此登录或注册