| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3340 人关注过本帖, 1 人收藏
标题:数组的问题
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
什么叫系统的?就是普通的Grid控件呀。

授人以渔,不授人以鱼。
2012-08-29 16:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用hyhosd在2012-8-29 16:23:39的发言:

两个主任是错的,每个机构只能有一个,我把数据给弄错了!

幸好不用针对“主任”重复一次“副主任”的工作。前面的程序应该可以满足你要求了,你把职务表的代码改一下套到这里用吧,或者参照思路修改你那边的数据结构。

hyhosd.zip (6.57 KB)

授人以渔,不授人以鱼。
2012-08-29 16:34
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用TonyDeng在2012-8-29 16:31:19的发言:

什么叫系统的?就是普通的Grid控件呀。

[attach]64484[/attach]


我的界面[颜色]显示,怎么和你的不一样
汉化版和英文版界面是否不一样

[ 本帖最后由 sdta 于 2012-8-29 19:20 编辑 ]

坚守VFP最后的阵地
2012-08-29 16:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
哦,VFP使用的控件是调用系统控件,我用的Win7主题,你用XP吧,风格是不一样的。

授人以渔,不授人以鱼。
2012-08-29 16:40
hyhosd
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2012-8-24
收藏
得分:0 
谢谢,TONYDENG和SDTA两位版主的热心帮助,我好好研究下两位的代码!
2012-08-29 16:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
整个程序包在72楼给你了,自己改吧。为方便你不用那个界面,特意把数据整理部分分割在外部函数中,这样就可以不用理会后面类代码部分。

授人以渔,不授人以鱼。
2012-08-29 16:43
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
难怪!!

坚守VFP最后的阵地
2012-08-29 16:45
hyhosd
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2012-8-24
收藏
得分:0 
回复 76楼 TonyDeng
谢谢TONYDENG版主,我只用前两部分就行,最后那个类定义我确实没写过,也不明白,不过我先把所有的下下来了,也可以学习下,看我前面写的那段代码,就能看出我是什么水平了,
2012-08-29 16:51
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
程序代码:
CREATE CURSOR TABA (JGID C(9),ZWDM C(1),行政职务 C(6),姓名 C(6))
INSERT INTO TABA VALUES ("140207000","1","理事长","姓名1")
INSERT INTO TABA VALUES ("140207000","2","监事长","姓名2")
INSERT INTO TABA VALUES ("140207000","3","主任","姓名3")
INSERT INTO TABA VALUES ("140207000","4","副主任","姓名4")
INSERT INTO TABA VALUES ("140207000","4","副主任","姓名5")
INSERT INTO TABA VALUES ("140207000","4","副主任","姓名6")
INSERT INTO TABA VALUES ("140207000","4","副主任","姓名7")
INSERT INTO TABA VALUES ("140207000","4","副主任","姓名8")
INSERT INTO TABA VALUES ("140206000","3","主任","姓名9")
INSERT INTO TABA VALUES ("140206000","4","副主任","姓名10")
INSERT INTO TABA VALUES ("140206000","4","副主任","姓名11")
INSERT INTO TABA VALUES ("140201000","1","理事长","姓名12")
INSERT INTO TABA VALUES ("140201000","4","副主任","姓名13")
*------------------------------------------------------
*--- 生成[职数]数组
SELECT JGID,COUNT(*) AS 职数 FROM TABA GROUP BY JGID INTO ARRAY ATABA_1

*--- 生成[行政职务] 职数 临时表
SELECT JGID,ZWDM,行政职务,COUNT(*) AS 职数 FROM TABA GROUP BY JGID,ZWDM,行政职务 INTO CURSOR TABA_1

*--- 职位最多的人数
CALCULATE MAX(职数) TO ZSMAX

*--- 生成[行政职务]数组
SELECT DISTINCT ZWDM,行政职务 FROM TABA INTO ARRAY ATABA_2

*--- 生成按[行政职务]排列
SELECT JGID,ZWDM,行政职务,CAST(FUN(JGID,行政职务) AS C(40)) AS 姓名 FROM TABA GROUP BY JGID,ZWDM,行政职务 INTO ARRAY ATABA_3

*--- 合计
SELECT SPACE(10) AS 合计,COUNT(*) FROM TABA UNION (SELECT 行政职务,COUNT(*) FROM TABA GROUP BY 行政职务) INTO ARRAY ATABA_4

*--- 生成查询临时表结构
CSTR=""
FOR I=1 TO ALEN(ATABA_2,1)
    CSTR=CSTR+ALLTRIM(ATABA_2(I,2))+[ C(]+TRANSFORM(7*ZSMAX-1)+[)]+IIF(I<ALEN(ATABA_2,1),[,],[])
ENDFOR
CREATE CURSOR TABB (JGID C(10),职数 N(4),&CSTR)

*--- 添加数据
APPEND FROM ARRAY ATABA_1
SCAN
    FOR I=3 TO FCOUNT()
        FOR J=1 TO ALEN(ATABA_3,1)
            REPLACE (FIELD(I)) WITH ATABA_3(J,4) FOR ALLTRIM(JGID)==ALLTRIM(ATABA_3(J,1)) AND (FIELD(I))=ALLTRIM(ATABA_3(J,3))
        ENDFOR
    ENDFOR
ENDSCAN

*--- 生成[合计]行
INSERT INTO TABB (JGID) VALUES ("合  计")
FOR I=2 TO FCOUNT()
    REPLACE RECORD RECCOUNT() (FIELD(I)) WITH IIF(TYPE((FIELD(I)))="N",ATABA_4(I-1,2),TRANSFORM(ATABA_4(I-1,2)))
ENDFOR

SELECT * FROM TABB INTO ARRAY ATABA_6 

*--- 调整临时数据表结构
LOCAL ATABA_5(FCOUNT()-2,1)
FOR I=3 TO FCOUNT()
    SELECT MAX(LEN(ALLTRIM(EVALUATE(FIELD(I))))) FROM TABB INTO ARRAY ATABB
    ATABA_5(I-2,1)=ATABB
ENDFOR

CSTR=""
FOR I=1 TO ALEN(ATABA_2,1)
    CSTR=CSTR+ALLTRIM(ATABA_2(I,2))+[ C(]+TRANSFORM(ATABA_5(I,1))+[)]+IIF(I<ALEN(ATABA_2,1),[,],[])
ENDFOR
CREATE CURSOR TABC (JGID C(10),职数 N(4),&CSTR)
APPEND FROM ARRAY ATABA_6
BROWSE
RELEASE ALL LIKE ATABA*
USE IN ("TABA_1")
USE IN ("TABA")
USE IN ("TABB") 



*--- 自定义函数 ---*
FUNCTION FUN
PARAMETER CJGID,CNAME
CSTR=""
SELECT TABA
SCAN FOR ALLTRIM(JGID)==ALLTRIM(CJGID) AND ALLTRIM(行政职务)==ALLTRIM(CNAME)
   CSTR=CSTR+ALLTRIM(姓名)+"-"
ENDSCAN
RETURN LEFT(CSTR,LEN(CSTR)-1)
ENDFUNC

重新修改后的代码,效果见下图:

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


[ 本帖最后由 sdta 于 2012-8-29 18:10 编辑 ]

坚守VFP最后的阵地
2012-08-29 17:28
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用hyhosd在2012-8-29 12:13:23的发言:

恩,最多就五个副主任,
副主任的多少不是关键问题,而是你的数据表结构要合理。

坚守VFP最后的阵地
2012-08-29 17:43
快速回复:数组的问题
数据加载中...
 
   



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

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