| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 524 人关注过本帖
标题:如何由 开支明细帐.dbf 动态生成 开支统计表.dbf
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10794
专家分:43364
注 册:2014-5-20
收藏
得分:8 
回复 4楼 王咸美
每个费用项目有个","分隔算是结构化了。
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
DECLARE long sscanf IN msvcr71 long, string, single@, long@
DECLARE long strcpy IN msvcr71 string@, string
buffer = REPLICATE(0h00,256)
a = 0.00
n = 0
CREATE CURSOR tt (姓名 c(10), 项目 v(10), 金额 n(6,2))
USE c:\_temp\开支明细帐.dbf ALIAS tb IN 0
SELECT tb
SCAN 
    FOR i=1 TO ALINES(arr,tb.支出明细,5,",")
        p  = strcpy(@buffer, arr[i])
        ph = p
        DO WHILE SYS(2600,p,1) != 0h00
            IF sscanf(p,"%f%n",@a,@n) == 1
                INSERT INTO tt VALUES (tb.姓名, SYS(2600,ph,p-ph), a)
                EXIT
            ELSE
                p = p+1
            ENDIF
        ENDDO
    ENDFOR
ENDSCAN
cmd = "CREATE TABLE 开支统计表 (姓名 c(10)"
SELECT DISTINCT 项目 FROM tt INTO CURSOR tmp
SCAN 
    cmd = cmd + "," + 项目 + " n(6,2)"
ENDSCAN
cmd = cmd + ", 合计 n(6,2))"
EXECSCRIPT(cmd)
SELECT DISTINCT 姓名 FROM tt INTO CURSOR tmp
SELECT 开支统计表
APPEND FROM DBF("tmp")
INDEX on 姓名 TAG 姓名
SELECT tt
SET RELATION TO 姓名 INTO "开支统计表"
SCAN 
    REPLACE (tt.项目) WITH tt.金额, 合计 WITH 合计 + tt.金额 IN "开支统计表"
ENDSCAN
SELECT * FROM 开支统计表
前天 19:23
schtg
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:Usa
等 级:贵宾
威 望:67
帖 子:2291
专家分:4774
注 册:2012-2-29
收藏
得分:0 
前天 19:24
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1026
专家分:1555
注 册:2021-10-13
收藏
得分:0 
这么多狐友给出了程序,你应该好好读一下,碰到类似需求尝试一下自己解决。

既是初学者,更应该去尝试,尝试过程中,如果运行有问题,自己找不出来,再发上来求助,这样对你的才有帮助!


前天 19:55
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢各位大佬的热心指导!!!
奇怪的是我在电脑上运行后“费用汇总统计”只有“姓名”和“合计”,并且都是空的,是软件的问题,还是其他原因?
图片附件: 游客没有浏览图片的权限,请 登录注册
前天 20:37
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10794
专家分:43364
注 册:2014-5-20
收藏
得分:0 
回复 14楼 王咸美
是“开支统计表”
前天 20:40
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
同样是空的
前天 21:06
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10794
专家分:43364
注 册:2014-5-20
收藏
得分:0 
回复 16楼 王咸美
将你的代码放上来看看好了
前天 21:23
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
DECLARE long sscanf IN msvcr71 long, string, single@, long@
DECLARE long strcpy IN msvcr71 string@, string
buffer = REPLICATE(0h00,256)
a = 0.00
n = 0
CREATE CURSOR tt (姓名 c(10), 项目 v(10), 金额 n(6,2))
USE E:\temp9\开支明细帐.dbf ALIAS tb IN 0
SELECT tb
SCAN
    FOR i=1 TO ALINES(arr,tb.支出明细,5,",")
        p  = strcpy(@buffer, arr[i])
        ph = p
        DO WHILE SYS(2600,p,1) != 0h00
            IF sscanf(p,"%f%n",@a,@n) == 1
                INSERT INTO tt VALUES (tb.姓名, SYS(2600,ph,p-ph), a)
                EXIT
            ELSE
                p = p+1
            ENDIF
        ENDDO
    ENDFOR
ENDSCAN
cmd = "CREATE TABLE 开支统计表 (姓名 c(10)"
SELECT DISTINCT 项目 FROM tt INTO CURSOR tmp
SCAN
    cmd = cmd + "," + 项目 + " n(6,2)"
ENDSCAN
cmd = cmd + ", 合计 n(6,2))"
EXECSCRIPT(cmd)
SELECT DISTINCT 姓名 FROM tt INTO CURSOR tmp
SELECT 开支统计表
APPEND FROM DBF("tmp")
INDEX on 姓名 TAG 姓名
SELECT tt
SET RELATION TO 姓名 INTO "开支统计表"
SCAN
    REPLACE (tt.项目) WITH tt.金额, 合计 WITH 合计 + tt.金额 IN "开支统计表"
ENDSCAN
SELECT * FROM 开支统计表
前天 21:45
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10794
专家分:43364
注 册:2014-5-20
收藏
得分:0 
回复 18楼 王咸美
运行结果截图看看  
前天 21:56
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
明天发截图
前天 22:21
快速回复:如何由 开支明细帐.dbf 动态生成 开支统计表.dbf
数据加载中...
 
   



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

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