我在写一个定时多任务提醒工具。大致流程是:
1、将要提醒的时间、标题、内容、完成情况 字段存在数据库中。
2、然后能过查询出未完成的提醒
3、用循环的方式一个个判断是否到期。有则提醒下面我这样的写法效率怎么样?procedure JsCxTx; //首先在窗体创建事件中进行查询
begin
with DtM.QryTiXingCheck do //查询定时提醒内容
begin
EnableControls; //先连接
Close;
SQL.clear;
SQL.Add('select * from TiXing where Tx_wc=0 and Tx_date>:Tx_date');
Parameters.ParamByName('Tx_date').value:=Now;
open;
DisableControls; //查询后断开控制(不知道用这句是不是能解决反复从数据库中获取值的问题)
end;
end;procedure TFormMain.tmrTxTimer(Sender: TObject); //窗体创建后每0.5秒执行一次
var
TxDate:TDateTime;
i:Integer;
TxBt,TxLr:string;
begin
with DtM.QryTiXingCheck do
begin
First; for i := 0 to RecordCount-1 do
begin
TxDate:=FieldByName('Tx_date').AsDateTime; //提醒时间
Txbt:=FieldByName('Tx_bt').AsString; //提醒标题
TxLr:=FieldByName('Tx_Lr').AsString; //提醒内容
Pzh:=FieldByName('Pzh').AsString; //任务编号 //如果有时间到期就提醒
if (0<SecondsBetween(now,TxDate))and(2>SecondsBetween(now,TxDate)) then
begin
dtm.JsExec('update TiXing set Tx_Wc=1 where Pzh=:pzh',[Pzh]); Application.CreateForm(TFtiXing,FtiXing); //显示提醒界面
FtiXing.ShowModal;
FtiXing.Free; JsCxTx; //重新查询提醒任务到 QryTiXingCheck
end;
Next;
end; end;
end;
1、将要提醒的时间、标题、内容、完成情况 字段存在数据库中。
2、然后能过查询出未完成的提醒
3、用循环的方式一个个判断是否到期。有则提醒下面我这样的写法效率怎么样?procedure JsCxTx; //首先在窗体创建事件中进行查询
begin
with DtM.QryTiXingCheck do //查询定时提醒内容
begin
EnableControls; //先连接
Close;
SQL.clear;
SQL.Add('select * from TiXing where Tx_wc=0 and Tx_date>:Tx_date');
Parameters.ParamByName('Tx_date').value:=Now;
open;
DisableControls; //查询后断开控制(不知道用这句是不是能解决反复从数据库中获取值的问题)
end;
end;procedure TFormMain.tmrTxTimer(Sender: TObject); //窗体创建后每0.5秒执行一次
var
TxDate:TDateTime;
i:Integer;
TxBt,TxLr:string;
begin
with DtM.QryTiXingCheck do
begin
First; for i := 0 to RecordCount-1 do
begin
TxDate:=FieldByName('Tx_date').AsDateTime; //提醒时间
Txbt:=FieldByName('Tx_bt').AsString; //提醒标题
TxLr:=FieldByName('Tx_Lr').AsString; //提醒内容
Pzh:=FieldByName('Pzh').AsString; //任务编号 //如果有时间到期就提醒
if (0<SecondsBetween(now,TxDate))and(2>SecondsBetween(now,TxDate)) then
begin
dtm.JsExec('update TiXing set Tx_Wc=1 where Pzh=:pzh',[Pzh]); Application.CreateForm(TFtiXing,FtiXing); //显示提醒界面
FtiXing.ShowModal;
FtiXing.Free; JsCxTx; //重新查询提醒任务到 QryTiXingCheck
end;
Next;
end; end;
end;
这句话的位置不对,应该放在for之外,,另外,你的timer每0.5秒执行一次,如果执行时间超了0.5s就会重复执行,这样容易死锁,应该在timer事件中第一句timer.enable:=false最后一句为true