我做的程序是单机程序,不用连接远程数据库.
有三个表, 分别用三个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出现老师所代的班级?
有三个表, 分别用三个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出现老师所代的班级?
cds3.MasterFields := 'TeacherName';
-----------------
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。你看能满足你的要求吗?
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的想法, 但也有一些特殊情况要考虑。 比如重查数据的时候,要控制事件的执行,否则可能会报错。