| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1401 人关注过本帖
标题:关于(vfp)编程问题,再次请教tiger先生和和高手们
只看楼主 加入收藏
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
结帖率:30%
收藏
已结贴  问题点数:20 回复次数:11 
关于(vfp)编程问题,再次请教tiger先生和和高手们
本人此前在本论坛请教,得到tiger先生和高手们的指导,现再次请教,为方便老师们指教,现把产生表格的程序列出:
close all
  clear
  set safe off
  use d1999 in 1
  zap
  use d2000 in 2
  zap
  use d2001 in 3
  zap
   
  close all
  CREATE table d1999(hm c(4),ms01 n(4),ms02 n(4),ms03 n(4),ms04 n(4),ms05 n(4),ms06 n(4),ms07 n(4),ms08 n(4),ms09 n(4),ms10 n(4),ms11 n(4),ms12 n(4))
  INSERT INTO d1999 VALUES ("雪碧",300,500,700,200,600,800,900,300,950,900,980,500)
  INSERT INTO d1999 VALUES ("可乐",100,300,600,400,700,900,1200,1300,1450,1100,880,600)

  
  brow
 
  CREATE table d2000 (hm c(4),ms01 n(4),ms02 n(4),ms03 n(4),ms04 n(4),ms05 n(4),ms06 n(4),ms07 n(4),ms08 n(4),ms09 n(4),ms10 n(4),ms11 n(4),ms12 n(4))
  Insert Into d2000  Values ("雪碧",100,200,300,400,500,600,800,900,1000,900,950,600)
  Insert Into d2000  Values ("可乐",200,250,380,390,450,900,1050,1100,1550,800,680,500)
  brow
  CREATE table d2001 (hm c(4),ms01 n(4),ms02 n(4),ms03 n(4),ms04 n(4),ms05 n(4),ms06 n(4),ms07 n(4),ms08 n(4),ms09 n(4),ms10 n(4),ms11 n(4),ms12 n(4))
  Insert Into d2001 Values ("雪碧",200,400,600,800,700,600,700,500,1050,600,850,700)
  Insert Into d2001  Values ("可乐",360,280,580,690,650,670,850,800,1450,900,580,450)
  brow
 CREATE table tjb (hm c(4),ldDate1 d(8), ldDate2 d(8))
 INSERT INTO tjb VALUES ( "雪碧", {^1999-3-1}, {^2001-10-31})
 INSERT INTO tjb VALUES ( "可乐", {^1999-5-1},{^2001-5-31})
 brow
 
  close all
  clear
  set safe on
俺的问题是,如何用以下的程序,对tjb表所要求的两个品种和期限进行统计?并同时得出这两个品种的结果表。
ldDate1=date(1999,9,1)
ldDate2=date(2002,12,30)
lcHm='雪碧'
lcSQL='create table tmp1 (ss n(4),hm c(10)'
for i=year(ldDate1) to Year(ldDate2)
  for j=iif(i=year(ldDate1),month(ldDate1),1) to iif(i=year(ldDate2),month(ldDate2),12)
    lcSQL=lcSQL+',ms'+str(i,4)+padl(j,2,'0')+' n(6)'
  endfor
endfor
lcSQL=lcSQL+',mstotal n(6))'   &&lcSQL=lcSQL+'mstotal n(6))'
&lcSQL


select tmp1
locate all for alltrim(hm)==lcHm
if eof()
  append blank
  replace hm with lcHm
endif

nTot=0
for i=year(ldDate1) to year(ldDate2)
  cTable='d'+str(i,4)
  use (cTable) in 2 alias tmp2
  select tmp2
  locate for alltrim(hm)==lcHm
  if eof()
    loop
  endif
  for j=iif(i=year(ldDate1),month(ldDate1),1) to iif(i=year(ldDate2),month(ldDate2),12)
    select tmp2
    lnFieldValue=evaluate(field(j+2))
    select tmp1
    lcFieldName='ms'+str(i,4)+padl(j,2,'0')
    replace (lcFieldName) with lnFieldValue
    nTot=nTot+lnFieldValue
  endfor
endfor
select tmp1
replace mstotal with nTot
brow
搜索更多相关主题的帖子: tiger vfp 
2010-10-21 21:47
寻H不得
Rank: 4
等 级:业余侠客
威 望:1
帖 子:181
专家分:222
注 册:2010-10-9
收藏
得分:4 
看来thomasou先生是个老手,只是没想通为何将这么个问题弄这么麻烦和复杂

我看了好一阵子 没想通
一、先建的三个表.. 为何不用一个表就解决了
             年月 雪碧 可乐
            199901 300   100
            199902  500   300
             .
                          .
二、你要达到的目的.. 没整明白为啥向临时表中用repl和循环来处理 看到都晕 直接用几个查询
如:     select ss,hm,ms01,ms02..ms from d1999 where hm='雪碧'  into dbf tmp1
大不了 再来点sum count之类的函数不行吗??
所以建议 建一个表 采用组合查询 看上去简单明了
2010-10-21 22:45
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:4 
早就宣判了你的帖子所涉及的表设计不规范,从而产生结果异常复杂。你不听劝告,一意孤行,实在是不好评价了。你自己琢磨吧。

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-10-21 22:48
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:4 
同意上面所说意见,什么问题都应该简单化,弄复杂头绪会太过多,你问的也麻烦,大家回答也麻烦。帮你答答问题还要看老半天,建议楼主多研究研究查询语句,用好会省事省时。
2010-10-21 23:05
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
谢谢各位老师的指导。
上次得到了tiger老师的指导,得到了一楼对ldDate1=date(1999,9,1)
                                       ldDate2=date(2002,12,30)
                                        lcHm='雪碧'这个特定条件下的统计程序,用得挺好的。
     在平常的应用中,对每个品种的统计,用的是日表汇总成月表,由月表汇成年表,这样的表格由基层人员填写,用EXECL格式,所以就用了很简单的模式,,在由文员导入VFP系统,形成数据库。
     今天琢磨着,看能否善用上次在论坛请教tiger老师的查询程序,根据tjb表一次对多个品种进行统计,形成一个统计查询的表格,俺自己又搞不掂,所以就请教老师们了。希望能赐教,谢谢。
     
2010-10-21 23:28
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:4 
昨晚看了前面几条就没耐性再看下去了:既然要建立新表,那么对旧表的打开、删除全部记录、再关闭……这些操作不是多余的吗?
还有就是每年一个表(有些人甚至一个月就一个表),那么十年、二十年呢?

两人行已有我师……
2010-10-22 08:27
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
谢谢老师们关注。前一段的建表程序,只是为了老师们指导时,方便衔接下面程序实验使用的,现实中,是有现成的年表的。谢谢。
2010-10-22 08:55
baichuan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:37
帖 子:953
专家分:589
注 册:2006-3-13
收藏
得分:4 
你可以建一个现成的表,然后导入EXCEL数据!

2010-10-22 16:19
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
日常工作中,是使用EXCEL表作记录和登记的,由日表累计成月表,由月表累计成年表,由年表导入VFP数据库,由于有大量的货品,所以用数据库管理,本次发帖请教,主要是从大量货品中按要求查询,请大家赐教,谢谢。
2010-10-22 16:41
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 
对于VFP来说,所有的所谓月表、年表都是多余的,日积月累全部放在一个表上即可。这样一个表,可以让你查询到具体某一天的数据,也可以让你统计任何一个时段(即任意一个起始日期到其之后的任意一个结束日期,可以是一天、两天、十几天、几十天、几个月或几年)的数据。

两人行已有我师……
2010-10-22 22:25
快速回复:关于(vfp)编程问题,再次请教tiger先生和和高手们
数据加载中...
 
   



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

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