| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4235 人关注过本帖
标题:求助,VF下标超界问题,关于数组的,用的是into array
取消只看楼主 加入收藏
wanming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-11-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
求助,VF下标超界问题,关于数组的,用的是into array
补充:
    同志们先别说循环的问题,我自信循环这没出问题,最主要是的,我用了这个查询sele count(*) from 表 where yw>=80 group by bj into array rs以后,连编的时候提示“找不到未知的rs”,这怎么解决??难道rs需要提前定义吗?是的话怎么定义?下图中的ZFrs等于我在这举的例子rs


图片附件: 游客没有浏览图片的权限,请 登录注册


我有一个程序,用了一个查询
sele count(*) from 表 where yw>=80 group by bj into array rs
[比如bj一共是6个]
引用时用的一个循环,比如
j=1
do whle j<=6
    repl all ywrs with rs(j) for bj=j        [已经打开了一个表,ywrs是此表的一个字段]
    j=j+1
enddo

连编的时候提示rs未定义

于是我在前面定义了dime rs(100),注:100足够大
又连编时提示下标超界,但是只有六个班,我定义的已经足够大了,为什么呢?

难道是因为into array rs中的rs只有rs(1)一个数值吗?如果是这样,我应该怎么解决?

最奇怪的是,我不用程序的形式,拷出这两个表,在命令窗口试,完成成功的
比如:sele count(*) from 表 where yw>=80 group by bj into array rs
repl ywmc with rs(1)
skip
repl ywmc with rs(2)
skip
repl ywmc with rs(3)
这样是完全有值的

[ 本帖最后由 wanming 于 2013-12-3 09:49 编辑 ]
搜索更多相关主题的帖子: count where 
2013-12-03 09:20
wanming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-11-23
收藏
得分:0 
回复 2楼 wp231957
不是,是有自增的,我忘记写了
2013-12-03 09:30
wanming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-11-23
收藏
得分:0 
回复 4楼 bccn0906
同志们先别说循环的问题,我自信循环这没出问题,最主要是的,我用了这个查询sele count(*) from 表 where yw>=80 group by bj into array rs以后,连编的时候提示“找不到未知的rs”,这怎么解决??难道rs需要提前定义吗?是的话怎么定义?
2013-12-03 09:46
wanming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-11-23
收藏
得分:0 
回复 6楼 bccn0906
如果忽略就出现这个

程序e:\中学教师分析系统20131202\prog\js.prg包含下列错误:
    未知的 ZFRS - 未定义
    未知的 GKRS - 未定义

运行时会出现“下标超界”
2013-12-03 09:52
wanming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-11-23
收藏
得分:0 
以下是引用bccn0906在2013-12-3 09:56:19的发言:

你太过自信你循环没出问题了,程序要键壮,最好加个数据元素数目判断

wait wind ALEN(rs) &&看看数目是多少?


FOR J=1 TO ALEN(rs)
    repl all ywrs with rs(j) for bj=j        [已经打开了一个表,ywrs是此表的一个字段]
ENDFOR


因为这个查询用的是gruop by bj而且我表中的bj是1,2,3,4,5,6没有别的数值,按理说数组rs里面有6个值,我也在命令窗口试过,rs(1)至rs(6)都有值
至于循环,因为程序的需要,我求了max(bj),所以用的是for J=1 to max(bj),自信循环没有错是因为这个循环里有很多repl,只是不是数组里面的,如果我把rs()值去掉,循环完全正确
2013-12-03 10:03
wanming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-11-23
收藏
得分:0 
以下是引用bccn0906在2013-12-3 09:56:19的发言:

你太过自信你循环没出问题了,程序要键壮,最好加个数据元素数目判断

wait wind ALEN(rs) &&看看数目是多少?


FOR J=1 TO ALEN(rs)
    repl all ywrs with rs(j) for bj=j        [已经打开了一个表,ywrs是此表的一个字段]
ENDFOR



对不起,兄弟错怪你了,我用了alen(rs),发现返回的是5,我试了一下rs(0)却提示下标错误,这可能是VF与其他语言在SQL上的不兼容吧。我记得C或C++的下标都是从0开始的,VF却是从1开始的
2013-12-03 10:09
wanming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-11-23
收藏
得分:0 
回复 12楼 wanming
alen()返回值是5,为什么rs(6)会有值呢?


彻底晕了,刚才试了下返回值是6啊,有点乱有点乱

[ 本帖最后由 wanming 于 2013-12-3 10:15 编辑 ]
2013-12-03 10:12
wanming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-11-23
收藏
得分:0 
以下是引用taifu945在2013-12-3 10:17:19的发言:

SELECT-SQL语句INTO ARRAY子句生成的数组是二维的,不是一维的。如果你班级有6个,那么6个班人数分别存放在:RS(1,1)、RS(2,1)、RS(3,1)、RS(4,1)、RS(5,1)、RS(6,1),而不是单纯的RS(1)-(6)。另外,VFP数组元素的下标从1开始,而非0。


可是rs(1)至rs(6)都有值,而且是正确的
在VF6.0中用SELECT-SQL语句INTO ARRAY,连编的时候提示找不到数组名,怎么解决?

[ 本帖最后由 wanming 于 2013-12-3 10:28 编辑 ]
2013-12-03 10:27
wanming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-11-23
收藏
得分:0 
以下是引用qingfameng在2013-12-3 14:52:03的发言:

个人体会,仅供参考
你的循环没有错,程序本身也没有错。是有这么一点情况。
程序中存在数组,执行源程序 .prg 不会出错。但是,如果用他的原始表达式,比如:rs(j),直接做参数使用,用于编译时有时会出现找不到数组或定义。这是经常碰到的事(原理没有细细探讨)。解决办法:用一个确定的参数再转换一次,问题能够解决。比如:crs=rs(j)。利用 crs参与运算或查询,,不要直接用用rs(j). 可试试。

你说的很有道理
现在我换了一种方法,问题是解决了,但没用数组,我的疑问也没有解开
2013-12-03 20:52
快速回复:求助,VF下标超界问题,关于数组的,用的是into array
数据加载中...
 
   



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

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