TIMER控件只能设定间隔值也就是interval设为300000是5分钟,但是没法指定具体的时间。请问下我想写个程序到时候给客户他只需要运行后就挂在服务器上就每天9点到3点固定每隔5分钟执行一段插入数据库的程序,该如何实现谢谢大家,非常急
解决方案 »
- 请教一下这个是什么控件,哪里可以找到
- 小数问题 我的sql server数据库字段是real 写入 23.5566 在delphi中 (single,real)总是 23.556600571 我格式化成6位后为23.556601
- 請問delphi怎麼样才能制作出XP的IE工具条那样的效果呀
- 刚结完了所有的贴,心情不错,散分!!
- 时间查找的问题。
- 程序出错,找不到dxtree.dcu,delphi理由这个控件吗?
- delphi中package如何使用!
- 已经开发了几套软件了,但是BDE的问题还是没有很好解决!
- ????急!急?
- 请教关于Delphi打印设置的问题
- fastreport的barcode无法计算宽度?
- 视频聊天程序出错,无法运行,请高手详细指点,并给出详尽的解决办法,谢谢!
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;
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;
返回两个日期之间的时间间隔。
语法
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 秒
否则,exe要一直运行着,再通过timer每秒判断当前的时间,是指定时间了,再执行需要的代码函数
万一在interval之内执行不完怎么办?
CreateWaitableTimer/SetWaitableTimer来完成这种长周期的定时例程.
用当前时间计算下一次的时间间隔(相对时间)并SetWaitableTimer,然后就是等待信号,信号到了,时间准没错.误差不会超过1秒的
或者直接用SetWaitableTimer设置下一次的绝对时间,然后就是等信号.
而且据说可以让计算机恢复待机(这个我没试过...)
若条件成立,则Enabled变False了,Timer就不起作用了,那里还有interval可言...
执行完代码再启用,这有何问题呢???
比较简单的做法是用2个Timer,一个用于判断时间当前时间,时间是9点到3点的时间,判断timer2是否是true,不是的话就设置为true。其他时间久判断timer2是否是false,不是false就设置false。
是不是这样修改
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;