标题:求助,VF下标超界问题,关于数组的,用的是into array
只看楼主
bccn0906
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:蜘蛛侠
威 望:2
帖 子:414
专家分:1183
注 册:2013-10-16
得分:0 
本是很简单的问题,你能把你的代码贴上来吗
2013-12-03 10:06
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
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
vf下标貌似从1开始计数

DO IT YOURSELF !
2013-12-03 10:14
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
得分:3 
以下是引用wanming在2013-12-3 10:03:09的发言:

 
 
因为这个查询用的是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()值去掉,循环完全正确
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。
2013-12-03 10:17
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
以下是引用wp231957在2013-12-3 10:14:55的发言:

vf下标貌似从1开始计数
对的
2013-12-03 10:17
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
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
得分:0 
以下是引用wanming在2013-12-3 10:27:01的发言:

 
 
可是rs(1)至rs(6)都有值,而且是正确的
在VF6.0中用SELECT-SQL语句INTO ARRAY,连编的时候提示找不到数组名,怎么解决?
这个问题可能是这样的:你在一个模块里未经定义就生成了RS()数组,然后在另外一个模块调用,这就牵涉到了变量的使用域问题。如果是这种问题,你可以在主程序中定义一句:PUBLIC RS(1)即可。后面SELECT-SQL语句再生成时,可能维数会变,这就不要管了,反正使用域是不会有变化的。若不是使用域问题,就不必理它,忽略掉就行了,应该可以连编成功的。只是出来的EXE你要执行一下,然后各种模块都运行着试试,看看能否调通。
2013-12-03 14:11
bccn0906
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:蜘蛛侠
威 望:2
帖 子:414
专家分:1183
注 册:2013-10-16
得分:0 
...

[ 本帖最后由 bccn0906 于 2013-12-3 15:33 编辑 ]
2013-12-03 14:14
bccn0906
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:蜘蛛侠
威 望:2
帖 子:414
专家分:1183
注 册:2013-10-16
得分:0 
我这程序段连编也会报错,但运行就正常得很
CREATE CURSOR t1 (f1 int)
INSERT INTO t1 (f1) VALUES (1)
SELECT f1 FROM t1 INTO  ARRAY rs
=prg1(@rs)
FUNCTION prg1
    para arr
    wait wind str(arr(1))
    RETURN
ENDFUNC


[ 本帖最后由 bccn0906 于 2013-12-3 22:23 编辑 ]
2013-12-03 14:16



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




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

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