主从表设计难题!(0分)

  • 主题发起人 主题发起人 delphi3058
  • 开始时间 开始时间
D

delphi3058

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现?请指点,谢谢了!!a表储存姓名,b表储存各科成绩。
姓名:XXX 性别:女 年龄:00
——————————————————
科目 成绩 备注
——————————————————
语文 100
数学 100
英语 100
——————————————————
打印日期:2006年10月10日
 
用fastreport
 
在报表里加两个表, 一个主表,一个从表,相关设置一下,两表都有一个学生ID号,用这个,把姓名设成主表,把成绩设成从表,
再用报表DBTEXT控件,把想想示的内容,选择一下就行了,注意,上面的消息,要从主表里成选,下成的才从子表里面选,这样它运行的时候就会自动,打印你想要的格式,至于下面的日期就不用说了,吧,有一个报表日期控件,拉一下,他会自动显示当前日期.我做过的,这样应该行,
 
能够实现每叶打印3条记录吗?能告诉具体怎么做吗?
 
在主项数据band 的 (OnBeforePrint事件里加判断:
大概就是这个样子
begin
lin:=[line#];
m:=lin mod 3 ;
if m=1 and (lin<>1) then
NewPage;
end
以下是手册上的:
内置函数
合计函数
合计函数可以在报表合计、页脚、主项数据脚、细项数据脚、子细项数据脚、分组脚和交叉表脚band。
l Sum(<expression> [, band] [,1]).为band中的行按<expression>计算值的总和。如果band的参数没有设置,sum缺省是计算所有数据值(主项数据,细项数据和子细项数据);另外,sum只能用于已命名的band中的数据。如果使用“1”这个参数,sum也可用于非可视对象。例如:
Sum([Part total], Band1);

Sum([[Part total] + [Part price]]);

Sum([Part total], Band1, 1).
l Avg, Min, Max.语法与sum函数类似。函数Avg计算算术平均值,函数Min返回最小值,函数Max返回最大值。
l Count(<band>).返回数据行的总数。例如:Count(Band1)。
字符处理函数
l Str(<value>).将包含的数值转换成字符。
l Copy(<string>, <from>, <count>).按长度<count>返回字符串<stirng>中的子串。
l If(<expression>, <string1>, <string2>).如果表达式为True,返回字符串<string1>;否则,返回字符串<string2>。
l FormatFloat(<formatstr>, <value>).将浮点数按格式符转换为字符。<formatstr>值在Delphi的文档中“Formatting strings”一节中描述。
l FormatDateTime(<formatstr>, <value>).将时期、时间按格式符转换为字符。<formatstr>值在Delphi的文档中“Formatting strings”一节中描述。
l StrToDate(<value>).转换字符<value>为日期。
l StrToTime(<value>).转换字符<value>为时间。
l UpperCase(<value>).转换字符<value>为全部大写。
l LowerCase(<value>).转换字符<value>为全部小写。
l NameCase(<value>).转换字符<value>第一个字符为大写,其它字符为小写。
l Length(<string>).返回<string>的长度。
l Trim(<string>).整理(去除)<string>的开始和末尾的所有空格,并返回结果。
l Pos(<substring>, <string>).返回子串<substring>在字符串<stirng>中的位置。
算术运算函数
l Int(<value>).返回数值<value>的整数部分。
l Frac(<value>).返回数值<value>的小数部分。
l Round(<value>).返回四舍五入的数值。
l value1 Mod value2.返回value1除以value2的余数。
l MinNum(<value1>, <value2>).返回两个<value>的最小值。
l MaxNum(<value1>, <value2>).返回两个<value>的最大值。
其它函数
l Input(<caption> [,<default>]).显示标题为<caption>并有一个编辑框的对话框。如果“defalut”参数被设置,则将这个字符显示在编辑框的。在用户点击“确认”后,返回输入的字符。
l Date.返回当前的系统日期。
l Time.返回当前的系统时间。
l Line#.返回当前的行号,从每个新组的开始进行计数。例如:
Master data
1. Detail data
2. Detail data
3. Detail data
Master data
1. Detail data
2. Detail data
l LineThrough#.返回当前行号,从报表的开始进行计数。例如:
Master data
1. Detail data
2. Detail data
3. Detail data
Master data
4. Detail data
5. Detail data
l Column#.返回交叉报表中的当前栏数。
l Page#.返回当前页码。
l TotalPages.返回已完成报表的总页数。要使用这个函数必须使用扫描两遍报表。
l DayOf(<date>).返回所给日期的天数(1..31)。
l MonthOf(<date>).返回所日期的月份。
l YearOf(<date>).返回所日期日期的年份。
l MessageBox(<text>, <caption>, <buttons_and_icons>).显示一个包含文本,标题和按钮的消息对话框。返回用户选择的值(mrOk, mrCancel, mrYes, mrNo)。对于<buttons_and_icons>参数有下列值:
按钮
图标

mb_Ok
mb_OkCancel
mb_YesNo
mb_YesNoCancel
mb_IconError
mb_IconQuestion
mb_IconInformation
mb_IconWarning

在报表生成期间可以使用的过程和函数
l CurY.返回下一个band打印的Y轴坐标。你可以为CurY设定一个值――它会因此移动位置。要在点阵和毫米间进行转换,使用下面比率:18点阵=5毫米。
l FreeSpace.按点阵返回页面上的剩余的空白区域。
l FinalPass.如果扫描两遍的报表,现在是运行最后一遍,则返回True。
l PageHeight.按点阵返回减去页脚Band高度的页面高度。
l PageWidth.按点阵返回页面宽度。
l StopReport.中止报表生成。
l NewPage.开始新的页面。
l NewColumn.在多栏报表中开始新的栏。
l ShowBand(<band>).显示名为<band>的Band。
 
后退
顶部