| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 765 人关注过本帖
标题:能在表单的文本框里用循环吗?
只看楼主 加入收藏
mjx
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-9-4
收藏
 问题点数:0 回复次数:9 
能在表单的文本框里用循环吗?

我的表单里有大约30个文本框,每个框都要输入一个条件,这些条件用来进行筛选操作,每次要用的框数不确定,我想用set filt to thisform.text1 .or. thisform.text2 .or thisform.text3……thisform.text30,能不能把1,2.3……30用宏替换来完成?

如果能,应该怎么写代码?

如果不能,应该怎么做?

初学VFP,请大家多指教

搜索更多相关主题的帖子: 表单 文本 
2006-09-04 11:04
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 

当然可以,以下思路供参考

Cserch=''
For i=1 to 29
Cno=alltrim(str(i))
Cserch=Cserch+"ThisFrom.Text"+&Cno+" "+"or "
EndFor
Cserch=Cserch+"ThisFrom.Text30"
Set Filter to &Cserch

[此贴子已经被作者于2006-9-4 16:01:05编辑过]


两人行已有我师……
2006-09-04 12:31
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
最好别这样做。建议采用智能一点的办法,即文本框输入数据的该条件有用,没有输入数据的该条件不考虑。
cExprL=".T."
IF !EMPTY(THISFORM.TEXT1.VALUE)
cExprL=cExprL+".AND.学号='"+THISFORM.TEXT1.VALUE+"'"
ENDIF
*......其他条件仿照上述进行操作,主要是为了产生FOR条件的表达式。
*如果学号等字段不是字符型,那就需要进行数据转换了。
*如年龄为数值型,对应第2个文本框,则
IF !EMPTY(THISFORM.TEXT2.VALUE)
cExprL=cExprL+".AND.年龄="+ALLTRIM(STR(THISFORM.TEXT2.VALUE))
ENDIF
*......
SET FILTER TO &cExprl

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-09-04 13:51
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 
补充一点,楼主的这个筛选语句的设计思路可能不太好,按照您的这个Set Filter 条件,只要有一个条件符合,那么记录就出现在结果中。30个条件中只要一个符合,这是多么容易的事啊。

两人行已有我师……
2006-09-04 16:00
zero07
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2006-5-10
收藏
得分:0 
啸兄说得对,楼主要做得精密点

2006-09-04 17:18
mjx
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-9-4
收藏
得分:0 

我按照啸兄的方法试了一下,不行

我的要求是按学号的前两位筛选,建立的表名是c:\xsgl\xs ,表里有2个字段,xh:学号和xm:姓名

请各位看看倒底是哪出问题了

use c:\xsgl\xs excl
Cserch=" "
For i=1 to 3
Cno=alltrim(str(i))
Cserch="ThisForm.Text"+allt(str(&Cno))+".value()"
?Cserch
set filt to left(xh,2)=left(Cserch,2)
i=i+1
EndFor

list
use

2006-09-04 22:38
mjx
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-9-4
收藏
得分:0 
如果我这些文本框中的条件都是对于一个字段的应该怎么办?

请问版主,如果我这些文本框中的条件都是对于一个字段的应该怎么办,即:把学号为1100或1101,或2100的记录显示出来

2006-09-05 00:03
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
你的要求是"或",那就一定要采用逻辑或运算啦。

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-09-05 00:23
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
专门针对你的特定字段学号,且进行逻辑或运算的查询程序片段:
cExprL=""
FOR nCnt=1 TO 30
cCnt=ALLTRIM(STR(nCnt))
IF !EMPTY(THISFORM.TEXT&cCnt..VALUE)
cExprL=cExprL+".OR.学号='"+ALLTRIM(THISFORM.TEXT&cCnt..VALUE+"'"
ENDIF
ENDFOR
IF EMPTY(cExprL)
SET FILTER TO
ELSE
cExprL=".F."+cExprL
SET FILTER TO &cExprL
ENDIF

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-09-05 00:31
mjx
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-9-4
收藏
得分:0 

谢谢版主,已经成了
以前没用过SET FILT TO .T.……的形式
见笑了

2006-09-05 02:33
快速回复:能在表单的文本框里用循环吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018402 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved