| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1400 人关注过本帖
标题:FoxPro中,为什么程序明明定义了数组,运行时却提醒数组不存在
只看楼主 加入收藏
menglongjiyi
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-5-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
FoxPro中,为什么程序明明定义了数组,运行时却提醒数组不存在
部分程序如下:
程序1.prg

SET DEFAULT TO D:\foxpro文件
DIMENSION G(66)

USE 文件0.DBF
GO BOTTOM
SCATTER TO G(66)
?G(1),G(2)
在执行该程序后,系统提醒 '文件g.prg' 不存在,但自己在命令窗口逐步输入上述命令,数组却显示正常,
有人提醒输入dirr=sys(2003)    SET DEFAULT TO (dirr)两条命令后,有时也会提醒 '文件g.prg' 不存在
还请高人指点哪里出了错误,感觉是不是哪里开关设置的不行。
搜索更多相关主题的帖子: 开关 
2015-05-16 14:22
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:4 
g[i]
2015-05-16 14:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
哪看来的SCATTER TO G(66)这种写法?这种纯语法问题,与其到处问人,为什么不看看帮助给出的示范是怎样的?

授人以渔,不授人以鱼。
2015-05-16 14:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
对 SCATTER TO 數組这样的指令来说,实际上事先并不需要定义和创建数组,因为在这条指令内部编写有dimension创建数组的语句,它会覆盖在外面定义的數組。而且,就算事先定义和创建了數組,元素的数量也是没用的,那条内部dimension语句,也会把數組裁剪伸缩为适合的大小。

dimension 數組[] 指令,也是修改數組大小的指令,所以在vfp中不需要有resize數組那樣的指令。

授人以渔,不授人以鱼。
2015-05-16 14:49
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:4 
应该看看帮助怎么说
2015-05-16 15:16
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
试一下这样:
SET DEFAULT TO D:\foxpro文件
DIMENSION aG[66]

USE 文件0.DBF
GO BOTTOM
SCATTER TO aG
?aG[1],aG[2]
2015-05-16 21:43
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
虽然 SCATTER TO aG 能自动生成 aG 数组,但要养成良好的编程习惯,凡是使用到变量都要先声明,否则有可能会出预想不到的结果,查找原因也不容易。
如:
CLEAR
CREATE CURSOR 表1 (f1 I, f2 I)
INSERT INTO 表1 VALUES (1,2)
INSERT INTO 表1 VALUES (3,4)
INSERT INTO 表1 VALUES (5,6)
DIMENSION aG[1]
GO BOTTOM
SCATTER TO aG
? aG[1], aG[2]
aTest()
? aG[1], aG[2] && 未被修改
aTest2()
? aG[1], aG[2] && 被修改了
RETURN

FUNCTION aTest()
    LOCAL aG[1]
    GO top
    SCATTER TO aG
    ? "aTest", aG[1], aG[2]   
ENDFUNC

FUNCTION aTest2()
    GO 2
    SCATTER TO aG
    ? "aTest2", aG[1], aG[2]   
ENDFUNC
2015-05-16 22:04
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:4 
我今天也遇到这个问题
QY="广州"
SELECT 编号,金额 FROM 表1 WHERE 区域=QY INTO ARRAY BHJE
AL=ALEN(BHJE)
FOR I=1 TO AL
...
ENDFOR
&&问题来了。
&&1、当第1次查询SELECT 有结果时,
AL=ALEN(BHJE)  &&没问题,如AL=10,也就是5条记录。。
&&2、如果我改变条件,区域="上海",但这个条件是没数据的,
SELECT 编号,金额 FROM 表1 WHERE 区域="上海" INTO ARRAY BHJE
AL=ALEN(BHJE)  &&此时,AL还是=10,理论上是没的,数据不存在的?

&&我为了解决这个问题,现在是这样做
RELEASE BHJE  &&释放
SELECT 编号,金额 FROM 表1 WHERE 区域=QY INTO ARRAY BHJE
AL=IIF(TYPE("BHJE")="U",0,ALEN(BHJE)) &&判断数组是否存在,存在才取数组长度
FOR I=1 TO AL
...
ENDFOR
不知道,这样做合理不?还是有其它更加好的方法。

2015-05-16 23:06
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:4 
以下是引用mywisdom88在2015-5-16 23:06:41的发言:

我今天也遇到这个问题
QY="广州"
SELECT 编号,金额 FROM 表1 WHERE 区域=QY INTO ARRAY BHJE
AL=ALEN(BHJE)
FOR I=1 TO AL
...
ENDFOR
&&问题来了。
&&1、当第1次查询SELECT 有结果时,
AL=ALEN(BHJE)  &&没问题,如AL=10,也就是5条记录。。
&&2、如果我改变条件,区域="上海",但这个条件是没数据的,
SELECT 编号,金额 FROM 表1 WHERE 区域="上海" INTO ARRAY BHJE
AL=ALEN(BHJE)  &&此时,AL还是=10,理论上是没的,数据不存在的?

&&我为了解决这个问题,现在是这样做
RELEASE BHJE  &&释放
SELECT 编号,金额 FROM 表1 WHERE 区域=QY INTO ARRAY BHJE
AL=IIF(TYPE("BHJE")="U",0,ALEN(BHJE)) &&判断数组是否存在,存在才取数组长度
FOR I=1 TO AL
...
ENDFOR
不知道,这样做合理不?还是有其它更加好的方法。

如果你只需要取纯粹的记录数,而不是那两个字段的内容,那么在输出项中只需写COUNT(*)即可。此时,后面的数组总是存在的:若无记录满足条件,那么数组就只有一个元素,值为0。当循环终止值的变量赋到0时,循环套会被自动越过。
2015-05-16 23:16
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
我是要字段内容,
由于,我输出只有2个字段,知道了数组的长度,也就知道了我数组里面有几条记录了。
SELECT 编号,金额 FROM 表1 WHERE 区域=QY INTO ARRAY BHJE
AL=ALEN(BHJE)
如果AL=2,那我数组就有1条记录,
AL=4,就有2条记录,,
我在取数组的数据时,就很方便了。
FOR I=1 TO INT(AL/2)
BHJE(I,1)   &&编号,
BHJE(I,2)   &&金额
...
ENDFOR

2015-05-17 00:02
快速回复:FoxPro中,为什么程序明明定义了数组,运行时却提醒数组不存在
数据加载中...
 
   



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

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