| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 789 人关注过本帖
标题:根据数据表内容来判断程序的执行。
取消只看楼主 加入收藏
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
根据数据表内容来判断程序的执行。
用程序获取某一张表里面的某一些数据,如果求和的结果为0,那么程序跳过指定的代码否则程序继续。

跳过指定的代码是否可以直接结束当前的代码(当前prg文件),然后进行后面的运算,
搜索更多相关主题的帖子: 数据表 
2014-06-05 20:43
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用tlliqi在2014-6-5 20:55:45的发言:

用if
if 数据1+数据2 <>0
执行语句1
else
执行语句2
endi



问题在于数据1 数据2需要在数据表中获取,获取的语句是select sum(rg) from zf
2014-06-05 20:58
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用hyz00001在2014-6-5 20:58:39的发言:




问题在于数据1 数据2需要在数据表中获取,获取的语句是select sum(rg) from zf




刚才问度娘的解决方案是:


SELECT SUM(rg),SUM(zf) FROM fl INTO ARRAY x

IF x >0
?'x>0'
ELSE if  
? 'X=0'
ENDIF


这样应该是可以比较好的解决。

请问有没有办法吧数据表里面的数据更多更快的赋值给变量然后直接使用的。
2014-06-05 21:01
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
谢谢关心。
2014-06-08 20:03
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用hu9jj在2014-6-9 07:26:12的发言:

作业题



SELECT SUM(rg),SUM(zf) FROM fl INTO ARRAY xb

IF xb >0
    USE flall
    DELETE from flall where fyear =YEAR(bgtime) AND fperiod =MONTH(bgtime)
    PACK
    APPEND FROM fl
ELSE if  xb =0
    =MESSAGEBOX('你没有更新数据,所以沿用之前数据!','重要提示',64,6000)
ENDIF



这是我自己 编写的代码,主要是判断有没有数据,如果没有录入数据,那么就将不会进行更新。下面是全部的代码:



*!*    CREATE DBF fl (;
*!*    cj             c(18),;
*!*    key            n(9,5),;
*!*    rg            n(9,5),;
*!*    zf            n(9,5),;
*!*    rgrate        n(9,5),;
*!*    zfrate        n(9,5))
SELECT distinc CAST(YEAR(bgtime)as n(4))fyear,CAST(month(bgtime)as n(2))fperiod,workshop,SUM(key)key,CAST(0as n(18,8))rg,CAST(0as n(18,8))zf,CAST(0 as n(18,8))jgf,CAST(0 as n(18,8))rgrate,CAST(0 as n(18,8))zfrate,CAST(0as n(18,8))jgfrate  FROM jqrwd GROUP BY 1,2,3 INTO TABLE fl
    =MESSAGEBOX('请输入数据!','重要提示',64,6000)
BROWSE TIMEOUT 5
UPDATE FL SET RGRATE =IIF(KEY =0,0,RG/KEY),zfrate =IIF(key =0,0,zf/key),jgfrate=IIF(key=0,0,jgf/key)
CLOSE TABLES

SELECT SUM(rg),SUM(zf) FROM fl INTO ARRAY xb

IF xb >0
    USE flall
    DELETE from flall where fyear =YEAR(bgtime) AND fperiod =MONTH(bgtime)
    PACK
    APPEND FROM fl
ELSE if  xb =0
    =MESSAGEBOX('你没有更新数据,所以沿用之前数据!','重要提示',64,6000)
ENDIF


SELECT workshop,key,rg,zf,jgf,rgrate,zfrate,jgfrate FROM flall WHERE fyear =YEAR(bgtime) AND fperiod =MONTH(bgtime) INTO CURSOR fla
COPY TO d:\fl TYPE CSV



现在的想法是如果需要一个参数就用一条select语句来整理,这样太复杂,也不方便,有木有比较快捷的方式让我能获取需要的数据进入变量。谢谢。

[ 本帖最后由 hyz00001 于 2014-6-9 13:54 编辑 ]
2014-06-09 13:51
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用sdta在2014-6-9 13:56:16的发言:


如果数组Xb不存在,上面的代码是否会发生错误



这是Vfp语法吗



程序没有发生错误,按照我自己的想法来编写的,可能不属于VFP语法。



以下是引用sdta在2014-6-9 14:09:47的发言:




这条代码中,有多处问题,不知楼主是否发现。


这个中间是不是说bgtime的变量没有定义?bgtime在另外一个语句中用public来定义的,所以在这边仍然有效。定义代码如下:
PUBLIC x ,bgtime,endtime,lasttime
x =DATE()
?GOMONTH(x,-1)-DAY(x)+1
bgtime =GOMONTH(x,-1)-DAY(GOMONTH(x,-1))+1
lasttime =GOMONTH(x,-2)-DAY(GOMONTH(x,-2))+1
endtime =x-DAY(x)
b =DATETIME()


其他的错误我就不清楚了。
2014-06-09 14:20
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用sdta在2014-6-9 14:27:54的发言:



CAST(YEAR(bgtime)as n(4))
YEAR(bgtime) 已经定义为数值型,宽度为4个字节。为什么此处还要用Cast()转换数据类型为数值型,是不是有点画蛇添足的感觉。


这个我不是很清楚,当时用year(bgtime)发现是文本,不能直接where fyear =2014 所以,我就添加了cast(year(bgtime)as n(4)) 这样就可以直接用where fyear =2014了。
2014-06-09 14:35
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
竟然不会执行,不过这个程序里面也是可以忽略的,忽略了对后面的计算不会有影响,只不过如果有调整数据,那么那个xb一定大于0,一定会进行更新动作。
否则不需要进行更新,也还好理解都没有怎么出现错误的原因了。
谢谢。
2014-06-10 21:37
快速回复:根据数据表内容来判断程序的执行。
数据加载中...
 
   



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

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