有一个主表,四个从表,关键字是“ZYDID”
其中主表一条数据对应从表的多条数据怎样可以实现选择连接主表DBGrid1显示的任何一条数据,点击修改按钮时,同时其它四个DBGrid2~5所显示的数据是与DBGrid1所选数据关连的数据?所有的东西基本都弄好了,就差DBGrid显示问题,每次点击主表所连接的DBGrid1数据修改按钮后,其它连接从表的四个DBGrid2~5所显示的数据都是其对应数据表内全部的数据,而不是只显示与主表关联的数据想了很久都解决不了,会的告诉我下怎么做5555--

解决方案 »

  1.   

    设置从表的DataSet.MasterSource为主表的DataSource具体可参见例子(D7)
    $(DELPHI)\Demos\Db\MastApp
      

  2.   

    在主表的DataSource的OnDataChange事件中,或是主表的Adoquery的afterScroll时间中,写入查询查询语句,让关键之为查询条件,当修改主表和主表插入是不查询,当确定选中主表某一行时,在查询显示!
    部分代码仅供参考:
    procedure TShenChanZiLiaoFrm.ADOQuery1AfterScroll(DataSet: TDataSet);
    var MaxID:string;
    begin
      if  (adoquery1.State=DsInsert) or (adoquery1.State=DsEdit)
           or( ScrollFlag=False) then
      begin
        exit;
      end
      else
      begin
         //正常条码
         with adoquery2 do
         begin
           close;
           sql.clear;
           sql.add('select * from PPID_FL where GongDanHao='''+adoquery1.Fieldbyname('GongDanHao').AsString+'''');
           open;
         end;
         //重复条码
         with adoquery3 do
         begin
           close;
           sql.clear;
           sql.add('select * from PPIDFL_Copy where GongDanHao='''+adoquery1.Fieldbyname('GongDanHao').AsString+'''');
           open;
         end;
         //不良条码
         with adoquery4 do
         begin
           close;
           sql.clear;
           sql.add('select * from PPIDFL_Error where GongDanHao='''+adoquery1.Fieldbyname('GongDanHao').AsString+'''');
           open;
         end;     //查询工单总数量
         with ado_temp do
         begin
           close;
           sql.Clear;
           sql.Add('select * from GongDan where GongDanHao='''+adoquery1.Fieldbyname('GongDanHao').AsString+'''');
           open;
           label5.Caption:=ado_temp.Fieldbyname('shuliang').AsString;
         end;     //查询数码个数信息
         with ado_temp do
         begin
           close;
           sql.Clear;
           sql.Add('select Count(*)PPID_Code from PPID_FL where GongDanHao='''+adoquery1.Fieldbyname('GongDanHao').AsString+'''');
           open;
           label6.Caption:=ado_temp.Fieldbyname('PPID_Code').AsString;
         end;     //查询重复条码个数
         with ado_temp do
         begin
           close;
           sql.Clear;
           sql.Add('select Count(*)PPID_Code from PPIDFL_Copy where GongDanHao='''+adoquery1.Fieldbyname('GongDanHao').AsString+'''');
           open;
           label7.Caption:=ado_temp.Fieldbyname('PPID_Code').AsString;
         end;     //查询重复不良条码个数
         with ado_temp do
         begin
           close;
           sql.Clear;
           sql.Add('select Count(*)PPID_code from PPIDFL_Error where GongDanHao='''+adoquery1.Fieldbyname('GongDanHao').AsString+'''');
           open;
           label8.Caption:=ado_temp.Fieldbyname('PPID_Code').AsString;
         end;
         //查询开始时间和结束时间
         with ado_temp do
         begin
           close;
           sql.Clear;
           sql.Add('select * from  PPID_FL where GongDanHao='''+adoquery1.Fieldbyname('GongDanHao').AsString+''' and ID=''1''');
           open;
           Beginstr1:=ado_temp.Fieldbyname('BeginDate').AsString;
         end;     with ado_temp do
         begin
           close;
           sql.Clear;
           sql.Add('select Max(ID) as IDstr from  PPID_FL where GongDanHao='''+adoquery1.Fieldbyname('GongDanHao').AsString+'''');
           open;
           MaxID:=ado_temp.Fieldbyname('IDstr').AsString;
         end;     with ado_temp do
         begin
           close;
           sql.Clear;
           sql.Add('select * from  PPID_FL where GongDanHao='''+adoquery1.Fieldbyname('GongDanHao').AsString+''' and ID='''+MaxID+'''');
           open;
           Endstr1:=ado_temp.Fieldbyname('BeginDate').AsString;
         end;   end;
    end;