标题:问题没有解决,再请教......
只看楼主
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
以下是引用陶然愚者在2013-2-27 10:35:20的发言:

那个界面的确是用90年代写的程序代码实现的。现在想用VFP9进行升级。除了输出界面之外,对数据表的统计操作应该还是相通的吧。不知这样想对不对
VFP9当然兼容FoxPro2.5,想法绝对正确。

活到老,学到老! http://www. E-mail:hu-jj@
2013-02-27 13:39
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
得分:0 
回复 10楼 sdta
二楼回复内容:


以4、6、9楼回复,不对吗?是否对二楼的意思没领会清楚?
简单说,国标、行标、地标、企标、协议五列是分别统计QYZYCPK表中某经济类型企业产品记录的BZDJ字段值分别为1、2、3、4、5的记录数,标准覆盖率由以上数据相加除以产品数得来,然后再以百分比显示。

[ 本帖最后由 陶然愚者 于 2013-2-27 14:44 编辑 ]
2013-02-27 14:15
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
得分:0 
又及:原来的数据表因为考虑到统计方便,在QYZYCPK表中有JJLX、JJHY....等字段,统计操作时只要设置条件为
count for qyzycpk.jjlx=数组变量1 to 产品数&&统计某经济类型企业生产产品数
count for qyzycpk.jjlx=数组变量1.and.qyzycpk.bzdj=c标准等级字段值 to 国标&&统计某经济类型企业产品执行国家标准产品数
......
后来,考虑到qyzycpk表与qyjbxxb表中重复字段太多,所以这两个表只保留了一个公共字段JGDM以便建立关联。
这样一来,就必须需要首先在QYJBXXB表中,提取各经济类型企业记录的JGDM字段值,存贮于一个数组中,然后再从QYZYCPK表中找出对应于这些JGDM值的记录进行分类统计。正因为如此,所以对于我这个初学者而言,大大增加了统计程序设计的难度。
当然,关键还是自己对VFP系统知识掌握不够,这样涉及多表操作的统计,弄着弄着就糊涂了
其实,有一点我似乎隐约间有点感觉:数据统计结果的错误,肯定是循环条件设置不当引起的,但到底应该如何设置几处循环条件,其间逻辑关系总是理不出一个头绪。

[ 本帖最后由 陶然愚者 于 2013-2-27 14:48 编辑 ]
2013-02-27 14:34
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
得分:0 
程序代码行再次上传,请指教:
程序代码:
SET ESCAPE OFF
SELECT b
USE qyjjlxk
IF .not.file('jjlxsy.idx')
  INDEX on jjlx TO jjlxsy
ELSE
  SET INDEX TO jjlxsy
  REINDEX
ENDIF
SELECT c
USE qyzycpk
IF .not.file('cpsy.idx')
  INDEX on jgdm TO cpsy
ELSE
  SET INDEX TO cpsy
  REINDEX
ENDIF

SELECT a
USE qyjbxxb
IF .not.file('jjlssy.idx')
  INDEX on jjlx TO jjlssy
ELSE
  SET INDEX TO jjlssy
  REINDEX
ENDIF
SET RELATION TO jjlx INTO qyjjlxk
SET RELATION TO jgdm INTO qyzycpk additive
GO top
TOTAL TO lxk.dbf ON jjlx
USE lxk
SET RELATION TO jjlx INTO qyjjlxk additive
COUNT ALL TO lxsl
GO top
j=lxsl
DIMENSION lx(j),lm(j)
j=1
DO whil .not.eof()
  lx(j)=jjlx
  lm(j)=b->jjlxmc
  j=j+1
  SKIP
ENDDO
USE qyjbxxb
ERASE lxk.dbf
j=1
STORE 0 TO hj1,hj2,hj3,hj4,hj5,hj6,hj7,hj8
DO WHILE j<=lxsl
  COUNT ALL FOR jjlx=lx(j) TO aa
GO TOP
l=aa
DIMENSION dm(l)
l=1
DO whil l<=aa
dm(l)=ALLTRIM(jgdm)
l=l+1
SKIP
ENDDO
  SELECT c
  GO top
FOR l=1 TO aa
  COUNT for dm(l)=jgdm TO bb
  COUNT for dm(l)=jgdm.and.bzdj='1' TO cc
  COUNT for dm(l)=jgdm.and.bzdj='2' TO dd
  COUNT for dm(l)=jgdm.and.bzdj='3' TO ee
  COUNT for dm(l)=jgdm.and.bzdj='4' TO ff
  COUNT for dm(l)=jgdm.and.bzdj='5' TO gg
  hh=ROUND((cc+dd+ee+ff+gg)/bb*100,2)
ENDFOR
hj1=hj1+aa
hj2=hj2+bb
hj3=hj3+cc
hj4=hj4+dd
hj5=hj5+ee
hj6=hj6+ff
hj7=hj7+gg
hj8=ROUND((hj3+hj4+hj5+hj6+hj7)/hj2*100,2)
j=j+1
SELECT a
SET FILTER TO
ENDDO
......&&将相关统计数据以统计表形式传送至屏幕或打印机
......&&恢复相关设置,返回调用程序


2013-02-27 15:04
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
程序代码:
SELECT Qyjjlxk.jjlxMC,CAST(COUNT(distinct Qyzycpk.jgmc) AS N(2)) 企业数,;
  CAST(COUNT(QYZYCPK.ZYCP) AS N(2)) 产品数,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[1],1,0)) AS N(2)) 国标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[2],1,0)) AS N(2)) 行标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[3],1,0)) AS N(2)) 地标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[4],1,0)) AS N(2)) 企标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[5],1,0)) AS N(2)) 协议 ;
  FROM QYJBXXB ;
  INNER JOIN QYJJLXK ;
  ON QYJBXXB.JJLX=QYJJLXK.JJLX ;
  INNER JOIN QYZYCPK ON Qyjbxxb.jgdm = Qyzycpk.jgdm GROUP BY Qyjjlxk.jjlxMC INTO CURSOR TEMP READWRITE

 *--- 在数据表最后插入一条记录
INSERT INTO TEMP ((FIELD(1))) VALUES (PADC("合计",FSIZE(FIELD(1)),[ ]))
*---下面的代码好处,不管你有多少数值型字段,也不需要你知道字段名,全部计算合计数
FOR I=1 TO FCOUNT()
    MFIELD=FIELD(I)
    IF TYPE(MFIELD)="N"
       *--- 数值型字段求和,并将结果添加到最后一条记录
       SUM &MFIELD TO HJ
       REPLACE RECORD RECCOUNT() (FIELD(I)) WITH HJ
       *--- 清空数值型字段内容为"0"的记录
       BLANK FIELD &MFIELD FOR &MFIELD=0
    ENDIF
ENDFOR
*---或者用下面的代码
INSERT INTO TEMP SELECT [合计],SUM(企业数),SUM(产品数),SUM(国标),SUM(行标),SUM(地标),SUM(企标),SUM(协议) FROM TEMP
BROWSE

坚守VFP最后的阵地
2013-02-27 16:05
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:10 
程序代码:
SELECT Qyjjlxk.jjlxMC,CAST(COUNT(distinct Qyzycpk.jgmc) AS N(2)) 企业数,;
  CAST(COUNT(QYZYCPK.ZYCP) AS N(2)) 产品数,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[1],1,0)) AS N(2)) 国标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[2],1,0)) AS N(2)) 行标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[3],1,0)) AS N(2)) 地标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[4],1,0)) AS N(2)) 企标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[5],1,0)) AS N(2)) 协议 ;
  FROM QYJBXXB ;
  INNER JOIN QYJJLXK ;
  ON QYJBXXB.JJLX=QYJJLXK.JJLX ;
  INNER JOIN QYZYCPK ON Qyjbxxb.jgdm = Qyzycpk.jgdm GROUP BY Qyjjlxk.jjlxMC INTO CURSOR TEMP READWRITE
INSERT INTO TEMP SELECT [合计],SUM(企业数),SUM(产品数),SUM(国标),SUM(行标),SUM(地标),SUM(企标),SUM(协议) FROM TEMP
BROWSE

坚守VFP最后的阵地
2013-02-27 16:07
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
得分:0 
回复 16楼 sdta
谢谢!慢慢学习领会。
另外:
1、程序中的N(2),其中“2”是指数据宽度对吗?数值是不是可根据需要增大?比如,如果数据库够大,这个数值可能是三位数或者四位数,是否就应该设为3或者4?
2、如果程序末尾不用Browse命令,而是用表格控件显示统计表,该如何实现?是不是将表格控件的数据源设置为表temp就行了?

[ 本帖最后由 陶然愚者 于 2013-2-27 17:37 编辑 ]
2013-02-27 17:09
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 

要在代码中设置,而不是在属性框中设置
1.将表格控件加入表单中
2.在表单的INIT事件中加入代码
程序代码:
SELECT Qyjjlxk.jjlxMC,CAST(COUNT(distinct Qyzycpk.jgmc) AS N(2)) 企业数,;
  CAST(COUNT(QYZYCPK.ZYCP) AS N(2)) 产品数,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[1],1,0)) AS N(2)) 国标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[2],1,0)) AS N(2)) 行标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[3],1,0)) AS N(2)) 地标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[4],1,0)) AS N(2)) 企标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[5],1,0)) AS N(2)) 协议 ;
  FROM QYJBXXB ;
  INNER JOIN QYJJLXK ;
  ON QYJBXXB.JJLX=QYJJLXK.JJLX ;
  INNER JOIN QYZYCPK ON Qyjbxxb.jgdm = Qyzycpk.jgdm GROUP BY Qyjjlxk.jjlxMC INTO CURSOR TEMP READWRITE
INSERT INTO TEMP SELECT [合计],SUM(企业数),SUM(产品数),SUM(国标),SUM(行标),SUM(地标),SUM(企标),SUM(协议) FROM TEMP
WITH THISFORM.GRID1
   .COLUMNCOUNT=FCOUNT([TEMP])
   .RECORDSOURCE=[TEMP]
ENDWITH



[ 本帖最后由 sdta 于 2013-2-27 17:59 编辑 ]

坚守VFP最后的阵地
2013-02-27 17:54
vfyf
Rank: 1
等 级:新手上路
威 望:1
帖 子:14
专家分:5
注 册:2013-2-27
得分:0 
回复 楼主 陶然愚者
发数据文件给我,我跟你改一下115731253@
2013-02-28 00:06
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:10 


SJB.rar (18.91 KB)

坚守VFP最后的阵地
2013-02-28 00:48



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




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

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