procedure TForm1.tmrJLTimer(Sender: TObject);
begin
   With ADOQuery1 do
    BEGIN
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('Insert into 记录数据(温度1,温度2,温度3,温度4,温度5,温度6,压力1,压力2,编号,时间) Values(:a,:b,:c,:d,:e,:f,:g,:h,:i,:j)');
      Parameters.ParamByName('a').Value:=trim(Edit1.Text);
      Parameters.ParamByName('b').Value:=trim(Edit2.Text);
      Parameters.ParamByName('c').Value:=trim(Edit3.Text);
      Parameters.ParamByName('d').Value:=trim(Edit4.Text);
      Parameters.ParamByName('e').Value:=trim(Edit5.Text);
      Parameters.ParamByName('f').Value:=trim(Edit6.Text);
      Parameters.ParamByName('g').Value:=trim(Edit7.Text);
      Parameters.ParamByName('h').Value:=trim(Edit8.Text);
      Parameters.ParamByName('i').Value:=trim(Edit11.Text);
      Parameters.ParamByName('j').Value:=FormatDatetime('HH:NN:SS', Now);
      ExecSQL();
    End;
end;TIME控件间隔时间3秒,也就是每3秒把数据写 入一下数据库。
现在出现了点小问题。
我定时是3秒写入一下数据库,但是时间发现并不是很精确。
比如写入的时间会出现如下情况:
12:22:20
12:22:23
12:22:26
12:22:29
12:22:32
12:22:35
12:22:39 间隔有的时候会发生改变
12:22:42
12:22:45有没有什么好的解决方法,数据库ACC的。求方法和代码,谢谢

解决方案 »

  1.   

    改用线程吧!!有时系统忙的时候,不一定能操作及时,折中的办法是,这个Timer启动之前,先把时间放到一个TIME变量T,然后每次执行时 T:= T + 3秒
      

  2.   

    Timer不准的,受CPU和IO的影响。
      

  3.   

    timer本来就不精确,你应该为timer每0.1秒执行一次,记录最后保存时间,当时间和最后保存时间相差3秒即保存即可
      

  4.   

    timer本来就不精确,你应该为timer每0.1秒执行一次,记录最后保存时间,当时间和最后保存时间相差3秒即保存即可。是什么意思呢!详细点我现在使用的是Timer启动之前,先把时间放到一个TIME变量T,然后每次执行时 T:= T + 3秒,但是这样时间会和本地时间出现误差!
      

  5.   

    现在不是记数的问题,而是你的timer 执行的时间间隔问题,如果想记录实际操作时间的话,那你没有任何方法能保证每次执行都绝对性的间隔3秒,也就是说无法达到你的要求。