J'ai une application Delphi qui a été en production depuis plusieurs années maintenant et récemment un morceau de code spécifique a cessé de fonctionner. En cas OnClose
pour la forme que je donne les résultats suivants:programme Delphi soudainement ne postez pas les changements de requête
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;
Il obtient à l'appel dtpPEEndTimeChange(self)
qui est la suivante:
procedure TfrmPublicEmpInfo.dtpPEEndTimeChange(Sender: TObject);
begin
qryPubEmployees.Edit;
dbePEEndTime.Field.Value := StrToInt(FormatDateTime('HHMM', dtpPEEndTime.Time));
end;
alors que dans cette fonction les appels programme Windows.pas et se coince dans :
function GetTickCount; external kernel32 name 'GetTickCount';
il ne publie jamais les modifications apportées à l'enregistrement.
Est-ce que quelqu'un sait si des mises à jour Windows ont pu causer ce dysfonctionnement? Nous sommes actuellement sur Windows XP Professionnel Version 5.1 SP 3.
La question évidente est "qu'est-ce qui a changé"? Si la seule chose qui a changé dans votre environnement est la mise à jour de Windows, la réponse est "Oui, les mises à jour de Windows sont à blâmer". Essayez de désinstaller le plus récent un par un et de tester ..? –
Non, Steve, la chose la plus récente à changer n'est pas toujours la cause. Il se pourrait que le code ait été erroné pour toujours et la dernière mise à jour a finalement corrigé un bogue qui permettait au mauvais code de fonctionner par accident. –
Peut-être - mais cela semble moins probable. Et certainement revenir sur les mises à jour permettra d'identifier le problème un peu. –