我的Delphi应用程序已经生产了几年,最近一段特定的代码已经停止工作。在表单的OnClose
事件中,我有以下内容:
procedure TfrmPublicEmpInfo.FormClose(Sender: TObject;var Action: TCloseAction);
var
i : integer;
strWorkDays : string;
begin
If cbMonday.Checked then strWorkDays := strWorkDays + 'Mo';
If cbTuesday.Checked then strWorkdays := strWorkDays + 'Tu';
If cbWednesday.Checked then strWorkdays := strWorkDays + 'We';
If cbThursday.Checked then strWorkdays := strWorkDays + 'Th';
If cbFriday.Checked then strWorkdays := strWorkDays + 'Fr';
If cbSaturday.Checked then strWorkdays := strWorkDays + 'Sa';
If cbSunday.Checked then strWorkdays := strWorkDays + 'Su';
if strWorkDays <> '' then
begin
qryPubEmployees.Edit;
qryPubEmployees.FieldValues['OCCUPATION'] := strWorkDays;
end;
dtpPEEndTimeChange(self);
dtpPEStartTimeChange(self);
For i := 0 to ComponentCount - 1 do
begin
If Components[i] is TQuery Then
with Components[i] as TQuery do
begin
if State = dsEdit then
post;
end;
end;
end;
进入dtpPEEndTimeChange(self)
调用是这样的:
procedure TfrmPublicEmpInfo.dtpPEEndTimeChange(Sender: TObject);
begin
qryPubEmployees.Edit;
dbePEEndTime.Field.Value := StrToInt(FormatDateTime('HHMM', dtpPEEndTime.Time));
end;
在此函数中,程序调用Windows.pas并卡在:
function GetTickCount; external kernel32 name 'GetTickCount';
它永远不会将更改发布到记录中。
是否有人知道任何Windows更新是否可能导致此故障?我们目前使用的是Windows XP Professional版本5.1 SP 3。
答案 0 :(得分:2)
GetTickCount返回红衣主教。如果要将结果存储到整数变量,当计算机已启动25天左右时,将导致整数溢出。 我只是猜测,但我们的应用程序曾经存在问题。