主题:如何写个函数给自变量学号就可得到该学号的语文成绩
dchd
[专家分:0] 发布于 2010-03-10 19:04:00
有一成绩表,如何写个函数给自变量学号就可得到该学号的语文成绩
先谢
回复列表 (共3个回复)
沙发
qjbzjp [专家分:8830] 发布于 2010-03-10 20:14:00
在自定义函数中用LOCATE for 命令查找学号,如果能找到,返回当前记录的语文成绩字段值。
板凳
moz [专家分:37620] 发布于 2010-03-11 19:38:00
好像有个函数叫做lookup(,)
3 楼
fyren [专家分:230] 发布于 2010-03-12 09:10:00
[quote]好像有个函数叫做lookup(,)[/quote]
这个最好!!
LOOKUP() 函数
在当前表的指定字段中查找信息。
有点类似 LOCATE 命令。
语法
LOOKUP(返回值所在的字段,被查找的内容,查找的字段[,索引名称])
比如:LOOKUP(部门,'庄稼',姓名)
如果表中有“庄稼”这个人,所在记录的部门字段为“电脑部”,那么该函数就会返回“电脑部”。
返值类型
可以是任何类型
参数描述
返回值所在的字段:当查到所需要的记录后该函数返回指定字段中的内容。如果查找不成功,即没找到,那么将返回与该字段长度相等的空数据,比如字符型就返回空格,空格数与字段长度相等。
被查找的内容:不用说了吧。
查找的字段:也不用说了吧。如果该字段有同名索引是打开的,系统将自动使用索引。使用索引会使查找快很多(废话)。
索引名称:如果索引的名称与字段名不同,可用这个参数指定,一般可以省略。必须是复合索引。
说明
该函数不能由 RUSHMORE 优化。不过您只要为查找的字段建立了索引,实际上也就相当于优化了。
另有一个函数:
SEEK(被查找的字符表达式 [, 工作区 | 别名 [, 索引序号 | 索引文件名 | 索引标识名]])
用法与此类似。
示例
我们在编软件的时候常常会有这种情况,在一个文本框中输入一个产品的代码,输入完后一回车,在另一个文本框中会显示出其产品名称,用这个函数来实现就可以实现这样的功能,当然这首先必须有一个代码、名称的对照表。
比如我们想在 text1 输入代码,在文本框 text2 中显示名称,那么我们可以在 text1 的 lostfocus 事件中写入:
select dmb &&选择代码、名称对照表
*下一句将查到的名称所对应的代码赋给text2
thisform.text2.value=lookup(名称,alltrim(this.value),代码)
thisform.text2.refresh
当然您也可以用如下程序:
select dmb &&选择代码、名称对照表
locate for 代码=alltrim(this.value)
if found()
thisform.text2.value=名称
endif
thisform.text2.refresh
很显然,用 lookup() 的程序简洁一些。
但是,如果是下面这种情况就不能完全照搬第一种形式:
select dmb &&选择代码、名称对照表
locate for 代码=alltrim(this.value)
if found()
thisform.text2.value=名称
thisform.text3.value=型号
endif
thisform.text2.refresh
thisform.text3.refresh
为什么呢?因为如果照搬,程序就要写成如下这样:
select dmb &&选择代码、名称对照表
thisform.text2.value=lookup(名称,alltrim(this.value),代码)
thisform.text3.value=lookup(型号,alltrim(this.value),代码)
thisform.text2.refresh
thisform.text3.refresh
这样电脑就将执行两次查询,很不经济,如果是一个有很多记录的表,这会使程序运行变慢,要是再增加几个项目,比如颜色、规格等,就更不堪设想了。
折衷的办法:
select dmb &&选择代码、名称对照表
thisform.text2.value=lookup(名称,alltrim(this.value),代码)
thisform.text3.value=型号
thisform.text2.refresh
thisform.text3.refresh
为什么这样可以呢?因为 lookup() 找到记录后同样会把记录指针定位到找到的记录上,这一点同 locate 是一样的,找不到也会定位在表结尾。
我来回复