我在做一个输入统计的程序,几台输入,一台即时统计。输入的程序中用一个TIDUDPCLIENT,当输入新的数据时,发送一个MESSAGE。统计的程序中用一个TIDUDPSERVER,当收到输入程序发送来的MESSAGE时,重新统计一下。有关函数如下:procedure TFrmStat.UDPServerUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  DataStringStream: TStringStream;
  n: Integer;
begin
  DataStringStream := TStringStream.Create('');
  try
    DataStringStream.CopyFrom(AData, AData.Size);
    label01.Caption := DataStringStream.DataString;
    n := StrToInt(DataStringStream.DataString); 
    Calc(n); 
  finally
    DataStringStream.Free;
  end;
end;function TFrmStat.Calc(n: Integer): LongInt;
begin
  with AdoQuery1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('select sum(amount) as sm from ' + DbfName
            + ' where ballno=' + IntToStr(n));
    Open;
    result := fieldbyname('sm').asInteger;
  end;
end;问题是:当输入数据时,label01.Caption := DataStringStream.DataString;这一句执行正常,但CALC(n)统计的结果却没有增加。可是当我用单步执行时,统计结果却又正确。我在FORM中另放一个按钮,只执行一句CALC(n),统计结果也是正确的。就是正常运行时不能统计。请各位高手分析其中的原因,或者有没有别的方法?