| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 789 人关注过本帖
标题:根据数据表内容来判断程序的执行。
只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
USE flall
DELETE from flall where fyear =YEAR(bgtime) AND fperiod =MONTH(bgtime)


是否能合成一条代码


纵观以上代码中的问题,鉴定结果如下:
楼主对VFP知之甚少,很少看VFP的帮助文件

[ 本帖最后由 sdta 于 2014-6-9 14:20 编辑 ]

坚守VFP最后的阵地
2014-06-09 14:17
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
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 12 楼 hyz00001
CAST(YEAR(bgtime)as n(4))


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

坚守VFP最后的阵地
2014-06-09 14:27
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
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用hyz00001在2014-6-5 20:43:22的发言:

用程序获取某一张表里面的某一些数据,如果求和的结果为0,那么程序跳过指定的代码否则程序继续。

跳过指定的代码是否可以直接结束当前的代码(当前prg文件),然后进行后面的运算,

根据某个条件有选择的执行某段代码或执行某项操作,这是常用语言中最基本的功能。常用的有if ....else....endif、do case....endcase等等。既然楼主已经写出了那么多的代码,不会连这样的基本结构都不知道吧。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-06-09 20:36
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用hyz00001在2014-6-9 13:51:21的发言:




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

这段代码在VFP下之所以可以执行而不报错,是因为VFP会自动忽略else,endif命令之后同一行的所有内容,VFP将这些内容视为注释。
但在VFP及很多语言中,一行内是不能存在两个命令的,而且IF与ENDIF必须的成对使用,否则系统就会报错。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-06-09 20:42
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用hyz00001在2014-6-9 14:35:50的发言:



这个我不是很清楚,当时用year(bgtime)发现是文本,不能直接where fyear =2014 所以,我就添加了cast(year(bgtime)as n(4)) 这样就可以直接用where fyear =2014了。

year()返回的值是数值型的,这在帮助文件中已经说的非常清楚。如果bgtime不是日期型数据,则执行这条命令时就会有出借提示。所以要转换数据类型的只能是函数的参数,而不是函数返回的值。

[ 本帖最后由 hu9jj 于 2014-6-9 20:55 编辑 ]

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-06-09 20:53
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.017879 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved