if NOT AQ_DETAIL.Active then AQ_DETAIL.Open ; if AQ_MAIN.Active AND AQ_DETAIL.Active THEN begin AQ_DETAIL.close; AQ_DETAIL.sql.clear; AQ_DETAIL.sql.add('SELECT * FROM 详细资料库 WHERE 编号:=P_BH'); AQ_DETAIL.Parameters.ParamByName('P_BH').Value :=AQ_MAIN.FieldByName('编号').Value; AQ_DETAIL.Requery([eoAsyncFetch]);//刷新数据 end; end;
to real_name(*真名) :用datachange的方法我在旧帖中已经说过了。to luckyboy97(幸运男孩) :通过MasterSource来建立主从关系只适合AdoTable,我实际用到的是AdoQuery,主表的数据是临时查询出来的,AdoQuery是不支持MasterSource的。虽然可以通过设置AdoTable的Filter属性达到Adoquery的Sql属性的效果,但执行效率并不高,而且返回的是表的全部字段,不能象SELECT语句一样制定返回的字段列表。
if AQ_MAIN.Active THEN begin AQ_DETAIL.close; AQ_DETAIL.sql.clear; AQ_DETAIL.sql.add('SELECT * FROM 详细资料库 WHERE 编号:=P_BH'); AQ_DETAIL.Parameters.ParamByName('P_BH').Value :=AQ_MAIN.FieldByName('编号').Value; AQ_DETAIL.open;//刷新数据 end;
换个 datechange什么的
if AQ_MAIN.Active AND AQ_DETAIL.Active THEN
begin
AQ_DETAIL.close;
AQ_DETAIL.sql.clear;
AQ_DETAIL.sql.add('SELECT * FROM 详细资料库 WHERE 编号:=P_BH');
AQ_DETAIL.Parameters.ParamByName('P_BH').Value :=AQ_MAIN.FieldByName('编号').Value;
AQ_DETAIL.Requery([eoAsyncFetch]);//刷新数据
end;
end;
不需要设置AQ_DETAIL.Parameters.ParamByName('P_BH').Value :=AQ_MAIN.FieldByName('编号').Value;当你设置上面的属性后,子表会自动增加P_BH字段值的!
建立方法:设置子表数据集的MASTERSOURCE为主表数据集,设置主关键字段MASTERFIELDS,在设置索引字段名INDEXNAME,基本就解决了,根本不用代码
begin
AQ_DETAIL.close;
AQ_DETAIL.sql.clear;
AQ_DETAIL.sql.add('SELECT * FROM 详细资料库 WHERE 编号:=P_BH');
AQ_DETAIL.Parameters.ParamByName('P_BH').Value :=AQ_MAIN.FieldByName('编号').Value;
AQ_DETAIL.open;//刷新数据
end;