标题:数组的问题
只看楼主
hyhosd
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2012-8-24
结帖率:100%
已结贴  问题点数:20 回复次数:93 
数组的问题
一个数组不固定,通过从表中某一字段取得的值生成的,将生成的数组放到令一个表中,表格式是固定的,比如说有6个字段,但是生成的数组也是最多6个元素。生成6个元素时不报错,小于6个时就提示“Subscript is outside defined range.”超出范围,其实数组里才一个元素,那位给解释下!
搜索更多相关主题的帖子: outside 元素 
2012-08-28 16:01
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
楼主是不是通过数组来将一个表的记录复制到另一个表中?
如果是的话,前提是两个表的结构完全相同才能够顺利实现。通过SCATTER命令可以将当前记录复制给数组,数组的元素不够时会自动扩充,然后通过GATHER命令将数据复制到表的当前记录中。

活到老,学到老! http://www. E-mail:hu-jj@
2012-08-28 17:25
hyhosd
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2012-8-24
得分:0 
回复 2楼 hu9jj
不是复制的意思,把一个表的某个字段的值赋值到数组中,然后再把数组中的值替换到新的表中,
2012-08-28 17:50
hyhosd
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2012-8-24
得分:0 
现在就是有点不明白为什么数组元素不满足第二个表的字段数时就报错,意思是不是元素不够时,相当于两个表的结构不一样呀?但是当数组的元素小于新表字段时,数组中有的值会替换进去,到了空值时就开始报错了!表结构如下,
a  b    c   d   e

a1  b1  c1  d1 e1
a2  b2


[ 本帖最后由 hyhosd 于 2012-8-28 18:14 编辑 ]
2012-08-28 17:54
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
得分:0 
以下是引用hyhosd在2012-8-28 16:01:33的发言:

一个数组不固定,通过从表中某一字段取得的值生成的,将生成的数组放到令一个表中,表格式是固定的,比如说有6个字段,但是生成的数组也是最多6个元素。生成6个元素时不报错,小于6个时就提示“Subscript is outside defined range.”超出范围,其实数组里才一个元素,那位给解释下!
1.贴上两个数据表的结构。
2.一个数组不固定,通过从表中某一字段取得的值生成的:
是一个值(该字段的一条记录),还是若干个值(该字段的若干条记录)。从楼主的情况看,数组应该是多行一列。
3.将生成的数组放到令()一个表中,表格式是固定的,比如说有6个字段,但是生成的数组也是最多6个元素:
如何将数组放到另一个表中的,前面说是以字段生成数组,自相矛盾。
4.要分清楚数组行与列的概念,否则问题就不好解决了。
2012-08-28 18:57
hyhosd
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2012-8-24
得分:0 
回复 4楼 hyhosd
呵呵,楼上的朋友确实厉害,是多行一列的数组,也就是你前几天给我回答的那个行专列的问题,我把我修改后的代码附上,由于初学,
CREATE CURSOR XZZW (JGID C(20),副主任 C(10),副主任1 C(10),副主任2 C(10),副主任3 C(10),副主任4 C(10))
select Gz02tmp   (此表有三个字段(jgid ,行政职务,姓名))
  SELECT  JGID  FROM ALIAS() GROUP BY JGID INTO ARRAY AREC
 FOR I=1 TO ALEN(AREC,1)
     SELECT 姓名 FROM Gz02tmp  where jgid = AREC(i)  INTO ARRAY ASS (AREC数组有两个值,1401和1402)
      SELECT("XZZW")
      append BLANK
      REPLACE JGID With AREC(I)   
      FOR I1=2 TO FCOUNT("XZZW")
          REPLACE RECORD RECCOUNT() (Field(I1)) With ASS(I1-1)
      ENDFOR
 ENDFOR
GZ02TMP表数据如下
JGID    行政职务      姓名
N1       FZR           M1
N1       FZR           M2
N1       FZR           M3
N1       FZR           M4
N1       FZR           M5
N2       FZR           M7
N1这一行记录,可以替进去,但到了N2行替进M7后 就开始提示超出范围。


[ 本帖最后由 hyhosd 于 2012-8-28 19:19 编辑 ]
2012-08-28 19:15
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
得分:0 
以下是引用hyhosd在2012-8-28 19:15:06的发言:

呵呵,楼上的朋友确实厉害,是多行一列的数组,也就是你前几天给我回答的那个行专列的问题,我把我修改后的代码附上,由于初学,
CREATE CURSOR XZZW (JGID C(20),副主任 C(10),副主任1 C(10),副主任2 C(10),副主任3 C(10),副主任4 C(10))
select Gz02tmp   (此表有三个字段(jgid ,行政职务,姓名))
  SELECT  JGID  FROM ALIAS() GROUP BY JGID INTO ARRAY AREC
 FOR I=1 TO ALEN(AREC,1)
     SELECT 姓名 FROM Gz02tmp  where jgid = AREC(i)  INTO ARRAY ASS (AREC数组有两个值,1401和1402)
      SELECT("XZZW")
      append BLANK
      REPLACE JGID With AREC(I)   
      FOR I1=2 TO FCOUNT("XZZW")
          REPLACE RECORD RECCOUNT() (Field(I1)) With ASS(I1-1)
      ENDFOR
 ENDFOR
GZ02TMP表数据如下
JGID    行政职务      姓名
N1       FZR           M1
N1       FZR           M2
N1       FZR           M3
N1       FZR           M4
N1       FZR           M5
N2       FZR           M7
N1这一行记录,可以替进去,但到了N2行替进M7后 就开始提示超出范围。
   SELECT 姓名 FROM Gz02tmp  where jgid = AREC(i)  INTO ARRAY ASS &&AREC数组有两个值,1401和1402:错误,认真看下你上次发的帖子,研究函数与命令的用法。另外,楼主的基础欠佳,建议楼主加强基础知识的学习。知道FOR I=1 TO ALEN(AREC,1)这行代码是什么意思吗?AREC(i)是什么意思?
与XZZW表结构无关。
我还是常说的一句话:先学走,再学跑。
2012-08-28 19:40
hyhosd
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2012-8-24
得分:0 
回复 7楼 bccn201203
恩,alen()函数是数组元素数目,行数,列数,ALEN(AREC,1)返回数组指定行数,也是就该数组有n行就返回n。如果是一维数组返回‘0’。刚开始学,所以基础不怎么好!

[ 本帖最后由 hyhosd 于 2012-8-28 19:53 编辑 ]
2012-08-28 19:50
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
得分:0 
以下是引用hyhosd在2012-8-28 19:50:39的发言:

恩,alen()函数是数组元素数目,行数,列数,ALEN(I,1)返回数组指定行数。如果是一维数组返回‘0’。刚开始学,所以基础不怎么好!
如果是一维数组返回‘0’???????
2012-08-28 19:53
hyhosd
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2012-8-24
得分:0 
VFP帮助上是这样说的,不知道我理解的对不对,AREC(I)不是返回数组里的值吗?数组有两个值1401和1402 写错了,应该是数组AREC里的值。

[ 本帖最后由 hyhosd 于 2012-8-28 20:00 编辑 ]
2012-08-28 19:56



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




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

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