有关set relation to的编程应用
set relation to 命令的功能:在两个打开的表之间建立关系。是主表与子表之间建立临时关联,建立临时关联的含义是: 当主表指针移动时,子表指针会自动跟着移动到关键字值相同的记录上。从而实现由别名区表向当前表自动提供数据信息。
为什么要提到这个命令,实际上我们在这里是要讨论一下编程思路的问题。而且本人在实际工作中也的确遇到过这些问题,提出来和大家讨论一下。
例如:某地区的考生人员数据表,表main1包含该地区人员的理论成绩,表main2包含该地区人员的论文成绩,两个表都有相同的字段如:code等,如何将表main2中的论文成绩添加到表main1的lwcj字段中,通常的做法是从表main1中的第一个记录开始,在表main2中找到与表main1中相同的的记录,再将需要的信息读取,然后赋值到表main1中的相关字段中,之后指针移到下一条记录,重复上面的过程,直到最后一条记录。
sele 1
use main1 &&理论成绩表
sele 2
use main2 &&论文成绩表
sele 1
do while .not.eof()
code1变量=code
sele 2
loca for code=code1变量
if .not.eof()
lwcj2变量=lwcj &&找到同一人并提取论文成绩
sele 1
repl lwcj with lwcj2变量 &&将此人的论文成绩添加到表main1的lwcj字段中
endif
sele 1
skip &&移到下一条记录,重复查找赋值过程。
enddo
这种做法思路清晰也很容易理解,但时间相对较长,当数据表足够大时,时间明显变慢。
让我们换个思路做一下:
sele 1
use main1
sele 2
use main2
inde on code to ls &&按code字段建立索引
sele 1
set relation to code into b additive
repl lwcj with b->lwcj for code=b->code
直接将表main2中的论文成绩添加到表main1的lwcj字段中。
为什么要用第二种方式呢,最大的好处就是快。如果在cup 是486、586的年代这两种方法在时间上的差距是惊人的,即使是在现在的电脑上运行两种程序,也会有明显的差距。
两种编程虽然都可以实现工作要求,但运行体验上给我的感觉是截然不同,本人现在使用的一套软件就存在很多诟病,用户体验感很差,浪费大量时间在等待程序作出响应。作为编程人员应多考虑用户在实际应用中的使用感受与体验,对程序进行优化。想想iPhone为何如此受欢迎,它的ios 系统是功不可没的。