现在从ADOQuery1中读取一个时间点,当系统时间到达这个时间点时,触发一个事件,用timer来实现,间隔时间为1000ms
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   dtpShfst1 := Trim(ADOQuery1.Fields[3].AsString);  //单步运行没问题,读出时间例如'16:00:00'
   s:=FormatDateTime('tt',now);
   if s = dtpShfst1 then
    begin
    //事件
    end;
end;这样不行啊,事件没有被执行。procedure TForm1.Timer1Timer(Sender: TObject);
begin
   dtpShfst1 := Trim(ADOQuery1.Fields[3].AsString);  
   if dtpShfst1 = FormatDateTime('tt',now) then
    begin
    //事件
    end;
end;这样更不行,单步运行到('tt',now)那里提示inaccessible value。
各位我错在哪里啊~

解决方案 »

  1.   

    实话告诉你timer没那么准,你不可能达到毫秒级精确,也就是那个if几乎不可能被执行,应用:if now>=预定时间 then…
      

  2.   

    1、不要用字符串比,用时间比,把ADOQuery1.Fields[3].AsString转成时间格式
    2、不要判断相等,判断now>'16:00:00'
      

  3.   

    每秒是可以的procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      label1.Caption:=datetimetostr(now);
      if formatdatetime('hh:nn:ss',now)=edit1.Text then 
         memo1.Lines.Add('比较相等了');
    end;
      

  4.   

    用3#楼方法可行,也可用DateDiff试试
      

  5.   

    你可以用日期时间做减法,查看是否相等。精确定时可以使用API中的 多媒体定时器,很准的。