spdj_ccd  --主单据 (select *  from 出仓单 where  日期 between :@date1 and :@date2)
spdj_ccdmx--明细 (select *  from 出仓单明细)我曾测试过三种主从方式,现在用第三种.请大家帮忙看看.
以下是测试结果:1.用系统设置的主从表格式,速度最慢,开始我是用这种方式.2.明细动态指定参数(select *  from 出仓单明细 where 单据号=:djh),数据集关闭再打开,会使速度变慢.
procedure Tdm.spdj_ccdAfterScroll(DataSet: TDataSet);
begin
dm.spdj_ccdmx.Close;
dm.spdj_ccdmx.Parameters.ParamByName('djh').Value:='----------';
if not dm.spdj_ccd.FIELDBYNAME('单据号').IsNull then
  dm.spdj_ccdmx.Parameters.ParamByName('djh').Value:=dm.spdj_ccd.fieldbyname('单据号').Value;
dm.spdj_ccdmx.Open;
end;3.用下面过滤方式,速度快很多.但如今有新问题:出仓单浏览(下一单,上一单这样浏览)的时候.从11月份开始很慢,之前却很快.不知为什么???
procedure Tdm.spdj_ccdAfterScroll(DataSet: TDataSet);
begin
if dataset.FieldByName('单据号').IsNull then
  spdj_ccdmx.Filter:='单据号='''+'----------'''
else
  spdj_ccdmx.Filter:='单据号='''+dataset.FieldByName('单据号').Value+'''';
spdj_ccdmx.Filtered:=true;
if not spdj_ccdmx.Active then
  spdj_ccdmx.Open;
end;

解决方案 »

  1.   

    明细我是用dbgrideh.我在dbgrideh中写了GetCellParams事件.如果将这事件取消,则10\11月的速度一样.但如果用了这个事件,11月就慢了.10的单据还是一样快.真是奇怪.
      if (sender as tdbgrideh).SumList.RecNo mod 2 = 1 then
        Background := clInfoBk //$00FFC4C4
      else
        Background := RGB(191, 255, 223)//$00FFDDDD;
      

  2.   

    唉,我只好舍弃GETCELLPARAMS这段了.