| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6420 人关注过本帖, 2 人收藏
标题:如何提高程序运行速度
只看楼主 加入收藏
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
以下是引用sdta在2020-9-13 10:59:30的发言:


例如能解决问题吗

最后一行代码应是:
 
REPLACE _1dxxf WITH '_1DXXF' FOR NOT '_'$_1dxx AND ('_'$k_1d OR '_'$k_1x OR '_'$k_1t) AND RECNO()=i
2020-09-13 15:07
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9799
专家分:26886
注 册:2012-2-5
收藏
得分:0 
以下是引用fdqzy在2020-9-13 15:03:35的发言:

老师:
SELECT t2
SET RELATION TO RECNO()+1 INTO "t1"
上面语句是t2的上1行与t1的当前行关联?
REPLACE ALL t1._1dxx  WITH t2._1dxt>0 AND t1._1dxt==t2._1dxt
t2的上1行与t1的当前行的_1dxt相等时,为.T.?

没这样用过

[此贴子已经被作者于2020-9-13 15:13编辑过]


坚守VFP最后的阵地
2020-09-13 15:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
以下是引用fdqzy在2020-9-13 15:05:19的发言:

老师:
SELECT t2
SET RELATION TO RECNO()+1 INTO "t1"
上面语句是t2的上1行与t1的当前行关联?
REPLACE ALL t1._1dxx  WITH t2._1dxt>0 AND t1._1dxt==t2._1dxt
t2的上1行与t1的当前行的_1dxt相等时,为.T.?

RECNO()是t2的当前记录号
RECNO()+1就是说:
t2的当前行与t1相对应行的下一行,t2行1时t1行2, t2行2时t1行3, ......
2020-09-13 16:20
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
用 SELECT SQL 语句,测试一下:
SELECT a.jnh, (b._1dxt>0 AND a._1dxt==b._1dxt) _1dxx, a._1dxt;
    FROM t1 a, t1 b;
    WHERE a.jnh==(b.jnh+1)
2020-09-13 16:24
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
以下是引用吹水佬在2020-9-13 16:24:29的发言:

用 SELECT SQL 语句,测试一下:
SELECT a.jnh, (b._1dxt>0 AND a._1dxt==b._1dxt) _1dxx, a._1dxt;
    FROM t1 a, t1 b;
    WHERE a.jnh==(b.jnh+1)


REPLACE ALL t1._1dxx  WITH t2._1dxt>0 AND t1._1dxt==t2._1dxt
  
SELECT jnh,;
       IIF(_1dxx,"_1DXX",IIF(_1dxt>0,"_1DXXF","      ")) _1dxx,;
       ICASE(_1dxt==1,"_1D",_1dxt==2,"_1X",_1dxt==3,"_1T","   ") _1dxt FROM t1
结果一样,代码更简捷!

[此贴子已经被作者于2020-9-13 18:55编辑过]

2020-09-13 18:14
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
以上方法代码简捷,运行效率高,我还得一一来学。
按4楼的方法:
表:
b1.rar (744 Bytes)

程序代码:
CLOSE TABLES all

USE b1 IN 0 ALIAS t1
BLANK FIELDS _1d, _1x,_1t,_2d, _2x,_2t ALL 
USE b1 IN 0 ALIAS t2 AGAIN 

SELECT t1

SET RELATION TO RECNO()+1 INTO "t2"


REPLACE ALL t2._1d  WITH IIF(t2.a1>t1.a1 ,"_1D", "");
            t2._1x  WITH IIF(t2.a1<t1.a1 ,"_1X", "");
            t2._1t  WITH IIF(t2.a1=t1.a1 ,"_1t", "");
            t2._2d  WITH IIF(t2.a2>t1.a2 ,"_2D", "");
            t2._2x  WITH IIF(t2.a2<t1.a2 ,"_2X", "");
            t2._2t  WITH IIF(t2.a2=t1.a2 ,"_2t", "")
           
SET RELATION TO
SELECT * FROM t1
BROWSE

没有问题,且运行比以前快多了
注:
"_1D"-下1行比上1行对应值大
"_1X"-下1行比上1行对应值小
"_1T"-下1行比上1行对应值相同



下面用变量就出问题
程序代码:
CLOSE TABLES all
USE b1 IN 0 ALIAS t1
BLANK FIELDS _1d, _1x,_1t,_2d, _2x,_2t ALL 
USE b1 IN 0 ALIAS t2 AGAIN 

SELECT t1

SET RELATION TO RECNO()+1 INTO "t2"

p1=ALLTRIM("t1.")+ALLTRIM('a')+ALLTRIM('1')
p11=&p1
k1=ALLTRIM("t2.")+ALLTRIM('a')+ALLTRIM('1')
k11=&k1
p2=ALLTRIM("t1.")+ALLTRIM('a')+ALLTRIM('2')
p22=&p2
k2=ALLTRIM("t2.")+ALLTRIM('a')+ALLTRIM('2')
k22=&k2
REPLACE ALL t2._1d  WITH IIF(k11>p11 ,"_1D", "");
            t2._1x  WITH IIF(k11<p11 ,"_1X", "");
            t2._1t  WITH IIF(k11=p11 ,"_1t", "");
            t2._2d  WITH IIF(k22>p22 ,"_2D", "");
            t2._2x  WITH IIF(k22<p22 ,"_2X", "");
            t2._2t  WITH IIF(k22=p22 ,"_2t", "")
           
SET RELATION TO
SELECT * FROM t1
BROWSE

问题在哪?

[此贴子已经被作者于2020-9-13 18:45编辑过]

2020-09-13 18:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
回复 15楼 fdqzy
数据记录多时可测试一下 SET RELATION TO 与 SELECT SQL 的速度,有时表面看语句简单并不就高效。
2020-09-13 19:54
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
回复 16楼 fdqzy
k11、p11等变量只获取了一条记录的数据
REPLACE ALL 是处理所有记录数据
2020-09-13 19:57
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
p1=ALLTRIM("t1.")+ALLTRIM('a')+ALLTRIM('1')
p11=&p1
相当于直接写 p11 = t1.a1
2020-09-13 19:59
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
以下是引用fdqzy在2020-9-13 18:26:48的发言:

以上方法代码简捷,运行效率高,我还得一一来学。
按4楼的方法:
表:
CLOSE TABLES all

USE b1 IN 0 ALIAS t1
BLANK FIELDS _1d, _1x,_1t,_2d, _2x,_2t ALL
USE b1 IN 0 ALIAS t2 AGAIN

BLANK FIELDS _1d, _1x,_1t,_2d, _2x,_2t ALL
这句可以不要,因下面的 REPLACE ALL 处理了
2020-09-13 20:09
快速回复:如何提高程序运行速度
数据加载中...
 
   



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

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