急!!! 数据库明细表问题?

Sean_1325 2007-06-30 04:04:45
我做的程序是单机程序,不用连接远程数据库.
有三个表, 分别用三个ClientDataset对应,取名依次为cds1, cds2, cds3. 其字段定义是:
表1 : ClassType(表示几年级), ClassName(表示年级名称), 例如: 6, 6年级1班;
表2 : ClassType, TeacherName, 例如: 6, 张老师;
表3 : ClassName, TeacherName, 例如: 张老师, 6年级1班;

问题: 表1与表2形成主细关系,
即cds2.MasterSource := DataSource1; cds2.MasterFields := 'ClassType';
但我怎样设置表3的主细关系,让表1和表2数据确定后,表3的数据也确定.
即: 当我在表1选择某具体年级后, 在表2出现该年级的所有任课老师, 但我在表2选择具体老师后,能够在表3出现老师所代的班级?
...全文
231 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sean_1325 2007-07-03
  • 打赏
  • 举报
回复
表数据如下:
---------------------------------------------
表1:
(1): '6', '6年级1班'; (2): '6', '6年级2班';
(3): '5', '5年级1班'; (4): '5', '5年级2班';
---------------------------------------------
表2:
(1): '6', 张老师'; (2): '6', 李老师';
(3): '5', '张老师'; (4): '5', '王老师';
---------------------------------------------
表3:
(1): '5年级1班', '张老师'; (2): '6年级2班', '张老师';
(3): '5年级2班', '王老师'; (4): '6年级1班', '李老师';
tom_cat007 2007-07-03
  • 打赏
  • 举报
回复
定义 cds1.AfterScroll 事件
if cds1.RecordCount > 0 then
begin
cds2.Filtered := False;
cds2.Filter := 'ClassType='+cds1.FieldValues['ClassType'] + ' ';
cds2.Filtered := True;
end;

定义 cds2.AfterScroll 事件
if Cds2.RecordCount > 0 then
begin
cds3.Filtered := False;
cds3.Filter := 'ClassType='+cds1.FieldValues['ClassType'] + ' And TeacherName = ''' + cds2.FieldValues['TeacherName'] + ''' ';
cds3.Filtered := True;

end;

应该可以大概满足lz的想法, 但也有一些特殊情况要考虑。 比如重查数据的时候,要控制事件的执行,否则可能会报错。
Harryfin 2007-07-03
  • 打赏
  • 举报
回复
根据你的表,一个老师所带的班其实是由年级和老师共同决定,因此我会把表调整如下:

表1:老师归属表
-----------------
id 年级 老师
1 6 张
2 6 李
3 5 张
4 5 王

表2:老师带班表
-----------------
id pid 班级
1 3 5年级1班
2 1 6年级2班
3 4 5年级2班
4 2 6年级1班

dataset1为"select distinct 年级 from 表1"
dataset2为"select * from 表1"
dataset3为"select * from 表2"

dataset2的年级关联dataset1的年级,dataset3的pid关联dataset2的id。你看能满足你的要求吗?
Harryfin 2007-07-01
  • 打赏
  • 举报
回复
请问LZ能每个表多给几条数据么?这样看起来有点抽象(不知道你的表有什么特殊情况)

另外我觉得表结构似乎也有点问题,先看数据再判断。
Sean_1325 2007-06-30
  • 打赏
  • 举报
回复
你那样设置,仅仅是将cds3与cds2建立了明细关系, 但还没有将cds3与cds1对应.
Sean_1325 2007-06-30
  • 打赏
  • 举报
回复
我试过这样,但是有多余数据,
如(1)张老师, 6年级1班; (2)张老师, 5年级3班
chenzhuo 2007-06-30
  • 打赏
  • 举报
回复
cd3.MasterSource := ds2;
cds3.MasterFields := 'TeacherName';
广东省医疗机构病案统计管理系统 (2012版) 1. Model level object lists 1. Physical diagrams objects 1. 表格清单 "名称 "代码 " "标准编码主表 "tStandardMain " "标准编码从表 "tStandardMx " "ICD字典库 "tICD " "疾病分类表 "tJBFLB " "中医码字典库 "tCHDISEASE " "单病种 "TSDISEASE " "手术码 "tOperate " "手术分类表 "tOperateFlb " "中度烧伤ICD "tBurnICD " "单病种提示表 "tSDISEASERemark " "系统参数表 "tParam " "科室词典表 "tWorkroom " "专科科室表 "tSpecialRoom " "门诊手术室表 "tMzOperateRoom " "自定义项目 "TitemSelfDef " "医生表 "tdoctor " "医生科室表 "tdoctorWorkRoom " "系统用户表 "TSYSUSER " "系统权限表 "TRight " "系统菜单表 "TMenu " "权限菜单设置表 "TRightMenu " "二/三级医院评审统计基表 "tJudgeBase " "报表记录表 "tReport " "科室门诊工作日志 "tWorklogNoDoctor " "医生门诊工作日志 "tWorklog " "诊工作日志(不分科) "tEmergeLogNoKs " "诊工作日志(分科) "tEmergeLog " "观察室工作日志(不分科) "tObservelogNoKs " "观察室工作日志(分科) "tObservelog " "专科门诊病人数 "tSpecialLog " "门诊工作报表——医技科室 "tMedicalTechLog " "医技科室(自定义) "tMedicalTechPlog " "门()诊工作报表 "TMzMjzWorkReport " "专科门诊病人分科报表 "TMzZkmzbrfkReport " "门诊手术病人分科数报表 "TMzSsbrfkReport " "门诊各科医生诊疗工作量报表 "TMzGkyszlgzlReport " "门诊医生个人诊疗工作量报表 "TMzYsgrzlgzlReport " "诊、观察室工作报表 "TMzJzgcsWorkReport " "医院工作报表(门诊部分) "TMzHospitalWorkReport " "病人最新信息 "TPATIENT " "病人诊断信息 "tDiagnose " "病人手术信息 "tOperation " "妇婴卡 "tBabyCard " "病人转科情况 "tSwitchKs " "中医院病人附加信息 "tChAdd " "肿瘤卡信息 "tKnubCard " "肿瘤化疗记录 "tKnubHl " "医保表 "TBAYB " "病人住院信息 "tPatientVisit " "病房工作动态日志 "TZyWardWorklog " "病案借阅登记表 "tbaLend " "病案日志表 "tBaLog " "科室字典备份明细表 "tWorkroomBakDetail " "系统用户组表 "TGroup " "用户组权限设置表 "TGroupRight " "科室字典备份主表 "TWorkroomBakMain " "门诊报表(主表) "TMzReportMain " "医院工作报表(医技科室) "TMzYjksHospitalWorkReport " "专家门诊病人数报表 "TMzZjmzbrsReport " "诊病人分科报表 "TMzJzbrfkReport " "观察室病人分科报表 "TMzGcsbrfkReport " "医技科室(自定义项目)报表 "TMzYjkszdyReport " "节假日表 "TPlaytime " "疾病分类方式表 "tJBFLFSB " "二/三级医院评审统计表 "TZyJudgeReport " "门()诊工作日报 "Tmzmjzdayworkreport " "观察室日报 "Tmzgcsdayreport " "家庭病床工作月报 "TZyHomeBedReport " "住院报表(主表) "TZyReportMain " "医院出院病人疾病分类疗效、疗程、费用情况"TZyOutPateintICDReport " "医院部分病种住院医疗费用 "TZyICDPartFeeReport " "医院出院病人疾病分类年龄别情况(一) "TZyOutPatientICDAgeReport1 " "医院出院病人疾病分类年龄别情况(二) "TZyOutPat
=============================== 特别公告,作者的邮箱更改为: borlandsoft@sina.com =============================== SReport For D6 来了 =================== 应该说SReport在好多网友特别是在写数据库管理程序(进销存,财务,客户管理等)的网友中还是很受欢迎的。好多的朋友都在找For Delphi6的版本。但是很抱歉一直没有。现在我抽时间做了出来,以解大家之。 有三点要说明: 一、下载的文件中SReport.hlp(SReport.rtf)是详细的帮助文档。 其它相关的文档在Documents目录中。 二、有关例程这次就不发布了,请参见CSDN中的For D5中的Demo。 其下载地点在Csdn的软件栏中的首页就有链接。(http://www.csdn.net/cnshare/soft/7/7408.shtm) 三、感谢CSDN(是个好地方)和上面的兄弟们。 谢谢大家的支持。 SReport 是谁? ============= 一个是将(商务管理软件)开发人员的报表设计工作量降为零,同时为最终用户提供“简单易用(这很重要)”、“功能强大”、“灵活方便”的报表自定义途径的Delphi Vcl。 SReport 能做什么? ================= (一)自定义页面、边距、字体; (二)自定义标题和页眉页脚; (三)在表头尾可以打印任何相关数据主表中的数据和自定义标签。 (四)可以定义明细数据中要打印的字段、标题、宽度、对齐方式、字体。 (五)可以定义明细数据是否页计、是否累计、是否总计、大写字段; (六)实现针打中的卷纸打印-打多少内容,走多少纸。 (七)直接生成文本文件、EXCEL格式文件、HTML网页格式文件。 (八)用户可以自己定义是否要打印报表顶端的单位信息标志。 (九)支持同一报表多格式并存,按用户的选择输出不同的报表。 (十)按任意字段分组打印并可对分组打印的相关选项进行设置。 如:按什么字段进行分组(需要软件设计者提供的数据源是按这个字段排序的); 每组打印完毕是否换页; 组间间距是多少; 换组后序号是否重排; 在报表的最后是否打印总合计。 (十一)在报表最尾打印用户自定义的信息,并可以保存这些信息。 SReport 是如何工作的? ===================== 提供需要打印的数据集名称并保证它处于打开状态。其它一切问题就由控件自己搞定(单表、主从结构、多主一从构,自定义结构)。

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧