标题:程序出错,illegal redefinition of variable ***,求助大家!
只看楼主
oogami
Rank: 2
等 级:论坛游民
帖 子:62
专家分:16
注 册:2013-1-29
结帖率:75%
已结贴  问题点数:20 回复次数:17 
程序出错,illegal redefinition of variable ***,求助大家!
本人菜鸟,请教大家下,程序跑到下面一段就会出错,错的地方用红色标出了,能不能请大家帮忙看看怎么错了?

另外,这个程序我每个月都要跑,跑了好几个月了都没事,就今天出错了,程序也没改过,是不是哪里出毛病了,求大家帮着看看,谢谢!!!


 CASE 产品状态="G"        &&退保终止
            SEEK ALLTRIM(个险长险再保信息.保单编号)+SPACE(1)+ALLTRIM(个险长险再保信息.产品代码) ORDER tag 保单 IN 个险长险再保保全变更记录
            IF 个险长险再保保全变更记录.产品状态="D"
                REPLACE 再保险费退费 WITH 0
                REPLACE 再保佣金退费 WITH 0
            ELSE
                DO p1_date
                REPLACE 再保险费退费 WITH 再保险费*(1-LapsedYear)
                REPLACE 再保佣金退费 WITH 再保佣金*(1-LapsedYear)
            ENDIF
        CASE 产品状态="I"                        &&犹豫期退保
            REPLACE 再保险费退费 WITH 再保险费
            REPLACE 再保佣金退费 WITH 再保佣金
        CASE 产品状态="H"                        &&复效
            PUBLIC PolYear   !!!!!!!!!!!!!!!!!!!!!!跑到这里出错!!!!!!!!
            SEEK ALLTRIM(个险长险再保信息.保单编号)+SPACE(1)+ALLTRIM(个险长险再保信息.产品代码) ORDER tag 保单 IN 个险长险再保保全变更记录
               
            DO CASE
                CASE 保单年度 - 个险长险再保保全变更记录.保单年度 = 0
                    REPLACE 再保险费退费 WITH -个险长险再保保全变更记录.再保险费退费
                    REPLACE 再保佣金退费 WITH -个险长险再保保全变更记录.再保佣金退费
                CASE 保单年度 - 个险长险再保保全变更记录.保单年度 = 1
                    IF 再保日期=GOMONTH(生效日,(保单年度-1)*12)            &&在评估当月且再保日期前复效
                        REPLACE 再保险费退费 WITH -个险长险再保保全变更记录.再保险费退费
                        REPLACE 再保佣金退费 WITH -个险长险再保保全变更记录.再保佣金退费
                    ELSE
                        PolYear=保单年度
                        DO p2_复效
                        REPLACE 再保险费退费 WITH -个险长险再保保全变更记录.再保险费退费-再保险费
                        REPLACE 再保佣金退费 WITH -个险长险再保保全变更记录.再保佣金退费-再保佣金
                    ENDIF
搜索更多相关主题的帖子: 保险费 产品 记录 信息 
2013-03-04 20:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
为什么会在这里声明全局变量?当然有重复声明的风险了,以前运行“正常”,恐怕是运气好没多次进入过这个选择分支而已。

授人以渔,不授人以鱼。
2013-03-04 20:32
oogami
Rank: 2
等 级:论坛游民
帖 子:62
专家分:16
注 册:2013-1-29
得分:0 
回复 2楼 TonyDeng
请问应该在哪里声明?请指点下不好意思。
偶属于赶鸭子上架,没学过vfp就来调试程序了,之前同事走了……杯具
2013-03-04 20:35
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
得分:5 
重复定义全局变量,建议去掉,该用临时赋空值,试试。比如:数值型 PolYear=0,字符型 PolYear='', ... 等等。
2013-03-04 20:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:10 
PUBLIC是全局变量声明,应该放在程序一开始处,这种变量的生命期是从声明开始持续到程序结束(或你用代码主动释放)的,声明过一次,它就可以在任何地方可见可用,不能重复声明,也就是说,这种语句只需要一次。你现在放在CASE分支中,当这个CASE条件成立时,语句就会执行,多次成立,就多次执行,那条报错信息就是告诉你,这是重复定义变量,不允许的。

授人以渔,不授人以鱼。
2013-03-04 20:39
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
佩服这个程序的设计者,表名、字段名设计的如此详细。

活到老,学到老! http://www. E-mail:hu-jj@
2013-03-04 20:46
oogami
Rank: 2
等 级:论坛游民
帖 子:62
专家分:16
注 册:2013-1-29
得分:0 
回复 5楼 TonyDeng
我刚刚试过把这句剪切掉放到了程序几乎最开始的地方,还是会出同样的错误。
您的意思是不是,这个变量不是针对一个prg文件而言的,只要在其中某一个prg声明过,以后的prg都可以用了?
我每个月要跑差不多70个程序,是不是之前的prg里面声明过了,而这里就像您所说进入了某一个分支,所以报错了?

另外,请您帮忙看看,如果要改正,能不能像4楼兄弟那样说的改,谢谢啦!
2013-03-04 20:46
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:5 
将这行语句注释掉再试试。

活到老,学到老! http://www. E-mail:hu-jj@
2013-03-04 20:48
oogami
Rank: 2
等 级:论坛游民
帖 子:62
专家分:16
注 册:2013-1-29
得分:0 
回复 5楼 TonyDeng
?"6.05个险长险保全变更"
??TIME()
****************6.05个险长险保全变更****************
SET TALK OFF
SET DELETED ON
CLOSE TABLES ALL

RESTORE FROM  f:\评估\VFP\MyVar.MEM ADDITIVE
PUBLIC PolYear


USE f:\评估\VFP\个险长险再保信息.dbf IN 0 ALIAS 个险长险再保信息
USE f:\评估\VFP\个险长险再保保全变更记录.dbf IN 0 ALIAS 个险长险再保保全变更记录
USE f:\评估\VFP\准备金因子.dbf IN 0 ALIAS 准备金因子
USE f:\评估\VFP\生存金因子.dbf IN 0 ALIAS 生存金因子
USE f:\评估\VFP\个险长险重疾费率_25种提前给付.dbf IN 0 ALIAS 个险长险重疾费率_25种提前给付
USE f:\评估\VFP\个险长险重疾费率_25种提前给付2012.dbf IN 0 ALIAS 个险长险重疾费率_25种提前给付2012
USE f:\评估\VFP\个险长险重疾费率_25种额外给付.dbf IN 0 ALIAS 个险长险重疾费率_25种额外给付
USE f:\评估\VFP\个险长险重疾费率_25种额外给付2012.dbf IN 0 ALIAS 个险长险重疾费率_25种额外给付2012
USE f:\评估\VFP\个险长险寿险费率.dbf IN 0 ALIAS 个险长险寿险费率
USE f:\评估\VFP\个险长险寿险费率2012.dbf IN 0 ALIAS 个险长险寿险费率2012
USE f:\评估\VFP\账户型.dbf IN 0 ALIAS 账户型
USE f:\评估\VFP\个险长险寿险新费率.dbf IN 0 ALIAS 个险长险寿险新费率
USE f:\评估\VFP\产品信息表.dbf IN 0 ALIAS 产品信息表





您看下,我就是放到这里,它还会报错,也是那个错误
2013-03-04 20:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
是的,这是在整个系统中存在的,不要在多个PRG中同时有这种语句。单改你这段代码是不够的,要全面检查所有代码才行。处理原则我上面已经告诉你了,就是这种语句只应有一句,而且最好集中在一个地方声明,不要分散在程序各个地方,那样很难维护的。

授人以渔,不授人以鱼。
2013-03-04 20:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-399724-1-1.html




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

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