我在做一个输入统计的程序,几台输入,一台即时统计。输入的程序中用一个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),统计结果也是正确的。就是正常运行时不能统计。请各位高手分析其中的原因,或者有没有别的方法?
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),统计结果也是正确的。就是正常运行时不能统计。请各位高手分析其中的原因,或者有没有别的方法?
ABinding: TIdSocketHandle);
var
Str : string;
n: Integer;
begin
SetLength(str,Adata.Size);
AData.Read(str[1],Adata.size);
try
label01.Caption := str;
n := StrToInt(str);
Calc(n);
finally
end;
end