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

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出现老师所代的班级?
...全文
223 7 打赏 收藏 转发到动态 举报
写回复
用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';

2,497

社区成员

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

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