| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 340 人关注过本帖
标题:有关set relation to的编程应用
只看楼主 收藏
于建伟
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-8-10
结帖率:100%
  已结贴   问题点数:20  回复次数:4   
有关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 系统是功不可没的。
2017-08-10 10:52
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:146
帖 子:6651
专家分:15115
注 册:2012-2-5
  得分:7 
第二种方法是可取的

[此贴子已经被作者于2017-8-10 11:42编辑过]


QQ:243688667
2017-08-10 11:41
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:114
帖 子:4360
专家分:17027
注 册:2014-5-20
  得分:7 
repl  lwcj  with  b->lwcj  all
2017-08-10 14:16
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:18
帖 子:270
专家分:529
注 册:2014-4-9
  得分:7 
回复 楼主 于建伟
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
个人两点建议:
1.repl lwcj with B->LWCJ FOR CODE=B->CODE &&此处的FOR条件是多余的,因为前面已经按CODE建立了关联。
2.根据本人在实际工作中的经验,建议此处的条件修改为FOR ALLT(B->CODE)<>' '
2017-08-10 20:07
于建伟
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-8-10
  得分:0 
回复 4楼 wangzhiyi
2017-08-11 08:32







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

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