| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1434 人关注过本帖, 3 人收藏
标题:VFP 探讨之 OLE 控件(七):图表控件(上)—数据源的组织方式
只看楼主 加入收藏
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
结帖率:100%
收藏(3)
 问题点数:0 回复次数:7 
VFP 探讨之 OLE 控件(七):图表控件(上)—数据源的组织方式
    图表控件可以让使用者在表单窗口上根据某个数据源绘制统计图,类似于Word和Excel那样。要使用图表控件,可在FoxPro表单的“插入对象”窗口中选择Microsoft Chart Control 6.0 SP4即可。它对应的文件是:Windows主目录下System32\mschrt20.ocx(64位系统中文件在Windows主目录下的SysWOW64文件夹中)。
    众所周知,绘制图表一定要有基础数据,这些基础数据以表的结构存在,类似于FoxPro中的表文件。对于FoxPro中表文件的数据,我们通常强调其设计的合理性,合理性之一就是结构的正确性,即,数据应作为字段名还是字段值的问题。比如:我们在学生成绩表中要统计一些指定课程的不及格人数,把统计结果生成一个表文件。对于这个表文件,结构一般是:年级、课号、课名、不及格人数(详见下图):
图片附件: 游客没有浏览图片的权限,请 登录注册


    我们要生成的统计图应该是下面这样的:
图片附件: 游客没有浏览图片的权限,请 登录注册
  
图片附件: 游客没有浏览图片的权限,请 登录注册


    因此,对于上面查询生成的表结构是不能绘制所需要的统计图的。原因有两个:(1)统计图需要清晰的数据系列(横向或纵向),而查询生成的表结构没有达到这个要求。一个有清晰数据系列的表结构应该象统计图表单上部的表格控件那样,这是很多数据库初学者喜欢的结构 ^_^;(2)对于某个年级某门课来说,没有人不及格就不生成记录,这样就会使统计图找不到某些系列而无法绘制。对于图表的数据源来说,没有数量也要有数据,这个数据就是0。
    明确了这两点,就要着手编一段程序代码,把查询生成的原始结构转换成能被图表控件识别的结构。程序代码不给出了,有兴趣自己写吧,不难的。唯一的问题就是:课程名称可能很长,远远超过了自由表结构规定的5个中文字长度,而且其中还有不允许作为字段名的字符(就象本例中课名里含有小括号)。我解决的方法是利用课号。课号只有6位,没有达到自由表结构规定的10位。虽然课号以数字开头,不能直接作为字段名,只要在前面加一个字母就完全可以了。表文件结构解决了,但表格控件上的标题却需要显示课名(为了更直观体现对应的课程)。我解决的办法是,从JXAP.DBF表中按表文件字段名的后6位(课号)查找对应课程名称,然后把表格控件每一列标题的Caption属性设置成各自对应的课程名称。JXAP.DBF中存放着课号与课名的对应关系。
收到的鲜花
  • tlliqi2014-05-09 14:45 送鲜花  50朵   附言:谢谢分享
搜索更多相关主题的帖子: Microsoft Windows 数据源 文件夹 统计图 
2014-05-09 10:20
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
vFp操作0lE控件最闹心的事
是不是啥资料都没有全靠自己摸索着弄

DO IT YOURSELF !
2014-05-09 13:07
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
想当年俺在开发应用系统时,为了实现图表功能吃了不少苦头,走了不少弯路。最大的苦恼就是手头的参考资料太少。感谢楼主的奉献精神,期待后续杰作……

泉城飞狐
2014-05-09 13:58
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
学习、借鉴。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-05-09 14:37
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
感谢楼主
2014-05-09 14:45
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
由“图像1.jpg”中的原始查询结果表如何转化为“图像2.jpg”中的结果表呢?
本人的 SQL 水平有限,采用如下代码转化出结果表,总感觉方法很“笨”,不知各位大侠有何高见?
程序代码:
CREATE CURSOR curResult (年级 c(4))
SELECT DISTINCT 课号,课名 FROM 查询结果 ORDER BY 1 INTO CURSOR curSubject
SCAN
    c = '_'+课号 +' I'
    ALTER table curResult ADD &c
ENDSCAN
SELECT 查询结果
SCAN
    SELECT curResult
    LOCATE FOR 年级 = 查询结果.年级
    IF !FOUND()
        INSERT INTO curResult (年级) VALUES (查询结果.年级)
    ENDIF
    REPLACE ('_'+查询结果.课号) WITH 查询结果.不及格人数
ENDSCAN
SELECT curResult
GO TOP
BROWSE NAME oBrowse NOWAIT
FOR i = 2 TO FCOUNT()
    SELECT curSubject
    oBrowse.Columns[i].Header1.Caption = TRIM(LOOKUP(课名,SUBSTR(FIELD(i,'curResult'),2),课号))
    SELECT curResult
NEXT
oBrowse.AutoFit
图片附件: 游客没有浏览图片的权限,请 登录注册


泉城飞狐
2014-05-09 15:13
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用wp231957在2014-5-9 13:07:06的发言:

vFp操作0lE控件最闹心的事
是不是啥资料都没有全靠自己摸索着弄

是的,这个图表控件我也花了很长时间在网上找资料,并结合FoxPro本身的对象浏览器功能不停摸索着。现在有一点点头绪了,分享出来让大家看看有什么更好的办法去用。
2014-05-09 15:40
yxrs999
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-7-26
收藏
得分:0 
留着看看谢谢
2016-07-26 16:07
快速回复:VFP 探讨之 OLE 控件(七):图表控件(上)—数据源的组织方式
数据加载中...
 
   



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

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