旧帖:困扰多日的DELPHI+SQL SERVER主从表查询排序问题!
http://community.csdn.net/Expert/TopicView.asp?id=4172443
但问题一直没有解决,肯请大家继续帮忙!分数增加到100。

解决方案 »

  1.   

    建议不要AfterScroll 事件
    换个 datechange什么的
      

  2.   

    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;
      

  3.   

    把AQ_DETAIL的DataSource的属性设置为:与AQ_MAIN对应的DataSource,
    不需要设置AQ_DETAIL.Parameters.ParamByName('P_BH').Value :=AQ_MAIN.FieldByName('编号').Value;当你设置上面的属性后,子表会自动增加P_BH字段值的!
      

  4.   

    你分别建立主表和子表数据集,然后通过属性建立他们之间的主从关系就OK了,在获得数据集的时候就主表根据ID进行排序、子表按照主表ID、子表ID进行排序,这样建立他的主父关系,你主表改变子表自动刷新数据。
    建立方法:设置子表数据集的MASTERSOURCE为主表数据集,设置主关键字段MASTERFIELDS,在设置索引字段名INDEXNAME,基本就解决了,根本不用代码
      

  5.   

    to real_name(*真名) :用datachange的方法我在旧帖中已经说过了。to  luckyboy97(幸运男孩) :通过MasterSource来建立主从关系只适合AdoTable,我实际用到的是AdoQuery,主表的数据是临时查询出来的,AdoQuery是不支持MasterSource的。虽然可以通过设置AdoTable的Filter属性达到Adoquery的Sql属性的效果,但执行效率并不高,而且返回的是表的全部字段,不能象SELECT语句一样制定返回的字段列表。
      

  6.   

    把从表的MASTERSOURCE属性设成主表的数据源,然后把masterfield 和indexfieldname设置下就好了
      

  7.   

    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;
      

  8.   

    用SQL跟踪看看出错语句。我认为问题一定出在SQL语句或数据库上,可以重建子表试试。