注册 登录
编程论坛 VFP论坛

生成3个临时表做成多明细报表求助!!

wangjiayu45 发布于 2021-06-10 11:28, 3366 次点击
查了好多资料,我已进入死循环,弄不起来了。请求帮助。
有三个表,需按条件生成临时表,再利用生成的临时表,做成多明细报表。如下图
只有本站会员才能查看附件,请 登录


我把文件上传了,文件夹放在桌面使用。
请老师帮忙
只有本站会员才能查看附件,请 登录
13 回复
#2
mywisdom882021-06-10 12:38
发现几个问题
1.路径问题,不要用绝对路径,如 Use  C:\Users\Administrator\Desktop\学生成绩\成绩表.Dbf  In 0   &&在空闲区打开此表
#3
吹水佬2021-06-10 16:39
这样子可不可以
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#4
wangjiayu452021-06-10 17:21
回复 3楼 吹水佬
是的,就是这样的,谢谢。老师能发上来吗
#5
sdta2021-06-10 17:39
三个表拼在一起,科目成绩转换为字符型
#6
wangjiayu452021-06-10 17:55
回复 5楼 sdta
搞不来,两个明细表弄不起来,都是字符型!
#7
吹水佬2021-06-10 19:30
程序代码:
** Command1.Click
n起始号 = INT(VAL(thisform.text1.value))
IF n起始号 == 0
    RETURN
ENDIF
n终止号 = INT(VAL(thisform.text2.value))
ASTACKINFO(ap)
cDefPath = ADDBS(JUSTPATH(ap[2]))
SET DEFAULT TO (cDefPath)
CLOSE DATABASES ALL
OPEN DATABASE 学生考试成绩
**
** 原索引不兼容本系统,考虑到兼容性,这几个表重新按 Machine 方式次序建索引
**
USE 学生表 IN 0 ORDER TAG 学生BH
USE 成绩表 IN 0 ORDER TAG 学生BH
USE 评语表 IN 0 ORDER TAG 学生BH
SELECT 学生表
bhSize = LEN(ALLTRIM(学生bh))
nFSize = FSIZE("学生bh")
SET RELATION TO 学生bh INTO 成绩表, 学生bh INTO 评语表
SET SKIP TO 成绩表, 评语表
FOR i=n起始号 TO n终止号
    c学号 = PADR(PADL(i,bhSize,"0"),nFSize," ")
    IF SEEK(c学号,"学生表")
        REPORT FORM 学生情况_2.frx PREVIEW FOR 学生表.学生bh==c学号 &&TO PRINTER
    ENDIF
ENDFOR
SET SKIP TO
SET RELATION TO
CLOSE DATABASES ALL

只有本站会员才能查看附件,请 登录
#8
sdta2021-06-10 19:50
程序代码:
select * from 学生表 into cursor xs
scan
    select 考试mc, 语文 + space(20) 语文, 数学, 英语, 体育 from 成绩表 where 成绩表.学生bh == xs.学生bh INTO CURSOR cj READWRITE
    INSERT INTO cj SELECT 日期, 平时纪律, "", "", "" FROM 纪律表 where 纪律表.学生bh == xs.学生bh ORDER BY 1
    BROWSE
endscan
#9
schtg2021-06-11 05:36
学习啦,谢谢分享!
#10
wangjiayu452021-06-11 07:16
回复 7楼 吹水佬
学习了,发现我的知识连个皮毛都不是,谢谢老师。
有一个问题,选择学生号打印,如果要打印学生号段,比如学号1到50,就生成50张报表,要一张一张手动打印。我本想是一键打印。
#11
吹水佬2021-06-11 08:04
回复 10楼 wangjiayu45
FOR i=n起始号 TO n终止号
    c学号 = PADR(PADL(i,bhSize,"0"),nFSize," ")
    IF SEEK(c学号,"学生表")
        REPORT FORM 学生情况_2.frx PREVIEW FOR 学生表.学生bh==c学号 &&TO PRINTER
    ENDIF
ENDFOR
这段代码就是一号一页连续自动输出,将预览输出改为打印输出。
#12
wangjiayu452021-06-11 09:00
谢谢吹不佬老师, REPORT FORM  学生情况_2.frx TO PRINTER NOWAIT NOCONSOLE OFF FOR 学生表.学生bh==c学号   &&直接输出到打印机
总觉得打印一页和另一页之间有停顿的感觉,打印多少页,打印机就接受了多少次命令。还是要感谢您的,这段代码中,我学到了从没用过的函数。谢谢。

[此贴子已经被作者于2021-6-11 09:01编辑过]

#13
吹水佬2021-06-11 09:25
回复 12楼 wangjiayu45
FOR 学生表.学生bh==c学号
每执行一次打印命令只打印一个学生的数据记录,要生成一页打印一页,中间有停顿感是正常的。
执行一次打印命令就全部输出就没那么简单的了,打印本身就快不了,无需太执着。

#14
jiazhefish2021-06-18 17:37
吹水佬 老师着实牛B
1