在一按钮中有如下代码,为什么要按两次按钮才能得出正确的结果呀?第一次执行sum_a的值为Null,第二次就是正确的值了,如果用单步调试,则第一次就可以成功,为什么呢?是不是mydatas.tjb_query还没查询出来就执行下面的代码了啊?
sqltemp:='select sum(a.金额) as sum_a from xedk a,spxx b,qhdm c where year(a.时间)="'+ndtemp+'" and a.编号=b.编号 and b.街道=c.qhdm and mid(c.qhdm,1,6)="'+dmtemp+'" group by c.qhdm';
mydatas.tjb_Query.Close;
mydatas.tjb_Query.SQL.Clear;
mydatas.tjb_Query.SQL.Add(sqltemp);
mydatas.tjb_Query.Open;for i:=1 to mydatas.qhjzQuery.RecordCount do
  begin
     mydatas.temp_Query.Append;
     mydatas.temp_Query.FieldByName('序号').AsInteger:=i;
     ndtemp:=trim(flatcombobox1.Items.Strings[flatcombobox1.itemindex]);
     mydatas.temp_Query.FieldByName('年度').AsString:=ndtemp;
     mydatas.temp_Query.FieldByName('街道').AsString:=trim(mydatas.qhjzQuery.fieldbyname('qhmc').asstring);
     mydatas.temp_Query.FieldByName('金额').AsVariant:=mydatas.tjb_Query.fieldbyname('sum_a').AsVariant;
     mydatas.temp_Query.UpdateBatch(arall);
     mydatas.qhjzquery.Next;
     mydatas.tjb_Query.Next;
  end;

解决方案 »

  1.   

    把sqltemp这个语句直接拿到数据库上执行一下,看看sum_a中是否有为null的记录
      

  2.   

    另建一个工程,直接运行结果一下就出来了,值不为null,为什么加在原来的程序里不行?对了,我前面还有一个删除所有记录的操作
      mydatas.temp_Query.Close;
      mydatas.temp_Query.SQL.Clear;
      mydatas.temp_Query.SQL.Add('delete * from jljtable');
      mydatas.temp_Query.ExecSQL;
      mydatas.temp_Query.SQL.Clear;
      mydatas.temp_Query.SQL.Add('select * from jljtable');
      mydatas.temp_Query.Open;
      

  3.   

    不知道你mydatas.qhjzQuery这个记录集是那来的值
    如果mydatas.qhjzQuery这个记录集为NULL的话,你的循环是走不下去的
      

  4.   

    mydatas.qhjzQuery这记录集为固定的值,不为Null,否则第二次按下按钮就得不出正确的值了,问题是现在我第一次按下按钮不能得到正确结果,第二次按下却能得到正确结果
      

  5.   

    在跟踪期间你可以上加上所为的显示:
    showmessage('显示信息');
    看看执行SQL语句时有没有问题..........
      

  6.   

    在跟踪调试时,sum_a的值又不为null了,如果不进行跟踪调试,则结果为null
      

  7.   

    也就是说我如果设了断点,sum_a的值是可正确得出的,如不设断点就第一次为null,第二次正确
      

  8.   

    你看看是不是tjb_Query 这个开了异步模式?
      

  9.   

    一行一行的去检查,执行每一行后,showmssage一下,然后去看看,对应的表里的数据是不是你预期的结果,这里的sum_a为null,说明前面的sum语句没有值,好好检查那语句与语句之前的语句
      

  10.   

    你的“for i:=1 to mydatas.qhjzQuery.RecordCount do“ 这句循环是从1开始的,改为从0开始循环看看或者mydatas.qhjzQuery.open的时候mydatas.qhjzQuery.first一下