| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 525 人关注过本帖
标题:如何由 开支明细帐.dbf 动态生成 开支统计表.dbf
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
生成文件名称为“开支统计表.dbf",打开后连标题都变了
图片附件: 游客没有浏览图片的权限,请 登录注册
前天 22:32
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
可能是电脑中病毒,明天重装系统看一看。
前天 22:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10794
专家分:43364
注 册:2014-5-20
收藏
得分:0 
回复 21楼 王咸美
肯定不是那个统计表
估计是路径问题,试试在文件头设置默认路径为当前prg路径。
如:
PUBLIC cDefPath
cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)
前天 22:40
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!明天再试一下,实在不行,重装系统。
前天 22:43
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10794
专家分:43364
注 册:2014-5-20
收藏
得分:0 
最后这样看看“开支统计表”文件存放在哪里:
MESSAGEBOX(DBF("开支统计表"))
前天 22:43
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
重装WINDOWS XP系统后生成的“开支统计表.dbf”只有 姓名、合计两个字段,且为空表。是不是系统老旧的问题?

[此贴子已经被作者于2025-10-22 00:01编辑过]

昨天 00:00
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10794
专家分:43364
注 册:2014-5-20
收藏
得分:0 
回复 26楼 王咸美
把你的文件打包上来测试
昨天 00:17
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1026
专家分:1555
注 册:2021-10-13
收藏
得分:0 
回复 27楼 吹水佬
你们俩的文件不在一个目录
昨天 01:40
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
@吹水佬 这是供测试用的程序和表文件,请赐教!
程序和表.rar (1.5 KB)
昨天 07:59
chychychy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:429
专家分:143
注 册:2015-4-18
收藏
得分:3 
吹版程序运行没问题,猜测是你个人路径的问题:你用桌面的“Visual FoxPro 9.0”的快捷方式打开prg文件,他的实际路径"C:\Program Files (x86)\VFP9",而你的原文件的实际路径是在“E:\temp9\开支明细帐.dbf”,可以在原始文件夹中先打开数据表,再从这里面运行prg程序,在吹版程序开头上一句CLOSE DATABASES,再修改一下路径即可。注意你安装程序和原始文件的路径,否则很容易将结果生成在安装程序所在目录。程序和运行截图如下
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
CLOSE DATABASES
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
USE 开支明细帐.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 开支统计表
昨天 08:25
快速回复:如何由 开支明细帐.dbf 动态生成 开支统计表.dbf
数据加载中...
 
   



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

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