TIMER控件只能设定间隔值也就是interval设为300000是5分钟,但是没法指定具体的时间。请问下我想写个程序到时候给客户他只需要运行后就挂在服务器上就每天9点到3点固定每隔5分钟执行一段插入数据库的程序,该如何实现谢谢大家,非常急

解决方案 »

  1.   

    TIMER设定值后,可以定时判断下09:00<当前时间<15;00,来执行以下操作呀。
      

  2.   

    interval还是默认为1000Timer1Timer事件:
    var
      D:TDateTime;
      H,T:string;
    begin
      D:=Now;
      H:=Formatdatetime('HH',D);
      T:=Formatdatetime('HHNN',D);  if (H>'09') and (H<'15') and (StrToInt(T) Mod 5 =0) then
      begin
        Timer1.Enabled:=False;
        //执行代码,执行结束后再设置Enabled=True;
      end;
    end;
      

  3.   

    程序时刻获取当前系统时间,当
    var
      cur_time:Tdatetime;  
      Tem_time:Tdatetime;
    begin
    if (formatdatetime('mm:dd:ss',now)>'09:00:00') and 
       (formatdatetime('mm:dd:ss',now)<'15:00:00') then 
    begin
       cur_time:=now;
       if datediff(s,cur_time,temp_date)=5 then
       begin
          temp_date=cur_time;
          insertdatatoDB();
       end;
    end;
    end;
      

  4.   

    用DateDiff()函数吧。 描述 
    返回两个日期之间的时间间隔。 
    语法 
    DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]]) 
    DateDiff 函数的语法有以下参数: 参数 描述 
    interval 必选。字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔。有关数值,请参阅“设置”部分。 
    date1, date2 必选。日期表达式。用于计算的两个日期。 
    firstdayofweek 可选。指定星期中第一天的常数。如果没有指定,则默认为星期日。有关数值,请参阅“设置”部分。 
    firstweekofyear 可选。指定一年中第一周的常数。如果没有指定,则默认为 1 月 1 日所在的星期。有关数值,请参阅“设置”部分。 
    设置 
    interval 参数可以有以下值: 
    设置 描述 
    yyyy 年 
    q 季度 
    m 月 
    y 一年的日数 
    d 日 
    w 一周的日数 
    ww 周 
    h 小时 
    m 分钟 
    s 秒 
      

  5.   

    问下4楼为什么在TIME>9小于15的时候Timer1.Enabled:=False然后执行完代码后再将timer1.Enabled:=true。。呢。
      

  6.   

    正确的做法是由 计划任务 来调度exe
    否则,exe要一直运行着,再通过timer每秒判断当前的时间,是指定时间了,再执行需要的代码函数
      

  7.   

    一直开着EXE倒无所谓,放在服务器上。最好代码能写吧。不然万一程序又要放到其他的地方。
      

  8.   


    万一在interval之内执行不完怎么办?
      

  9.   

    除计划任务外,
    CreateWaitableTimer/SetWaitableTimer来完成这种长周期的定时例程.
    用当前时间计算下一次的时间间隔(相对时间)并SetWaitableTimer,然后就是等待信号,信号到了,时间准没错.误差不会超过1秒的
    或者直接用SetWaitableTimer设置下一次的绝对时间,然后就是等信号.
    而且据说可以让计算机恢复待机(这个我没试过...)
      

  10.   


    若条件成立,则Enabled变False了,Timer就不起作用了,那里还有interval可言...
    执行完代码再启用,这有何问题呢???
      

  11.   

    是不是可以注册一个管理服务程序,然后调用相应的服务,已WINDOWS管理程序的身份后台运行,另外同你执行的程序有关,有界面还是无界面?是控制台程序还是网络传输程序等。
      

  12.   

    任务计划是标准解决方案,你想自己检测时间,或者开个服务也都是可以的(任务计划本身就是svchost的服务之一),没什么原则性的不同。
      

  13.   

    使用TIMER即可。上述都有代码。 
      

  14.   

    办法有很多。
    比较简单的做法是用2个Timer,一个用于判断时间当前时间,时间是9点到3点的时间,判断timer2是否是true,不是的话就设置为true。其他时间久判断timer2是否是false,不是false就设置false。
      

  15.   

    请问下这个程序改成早上9点到11点半,下午1点半到3点执行插入如何修改
    是不是这样修改
    interval还是默认为1000Timer1Timer事件:
    var
      D:TDateTime;
      H,T:string;
    begin
      D:=Now;
      H:=Formatdatetime('HHNN',D);
      T:=Formatdatetime('HHNN',D);  if (H>'0900') and (H<'1130') and (StrToInt(T) Mod 5 =0) then
      begin
        Timer1.Enabled:=False;
        //执行代码,执行结束后再设置Enabled=True;
      end;
    if (H>'0130') and (H<'0300') and (StrToInt(T) Mod 5 =0) then
      begin
        Timer1.Enabled:=False;
        //执行代码,执行结束后再设置Enabled=True;
      end;
    end;