设定的时间是从sqlserver2000数据库中提取的,字段名为:kssj(开始时间),它是datetime类型的,格式例如:2008-10-20 10:19:31怎么利用timer控件来相应
如果当前系统时间等于从数据库中提出来的时间,然后响应一个事件,或者弹出窗口也行啊
怎么实时控制啊

解决方案 »

  1.   

    1.先定義 取樣時間 (多久到SQL2000讀取時間資料) 假定十秒一次
    2.TTimer 元件設定五秒觸發一次 
    3.在 TTimer 觸發時讀取 sql2000時間 kssj , kssj-5 >= NowTime >=kssj+5 條件成立則去執行你要的程式
      

  2.   

    我有几个问题:
    ①怎么设定到SQL2000讀取時間資料的取样时间啊
    是不是要给它这个功能另外用一个Timer控件来设定啊
     对于Ttimer触发时间我倒知道就是设定
    timer.interval:=500;(半秒钟)②还有从sqlserver中可能取出多条记录,在哪个地方用这个条件:kssj-5 >= NowTime >=kssj+5 
    下来触发一个事件啊③可以在timer的Timer1Timer事件下写sql语句对数据库进行修改吗
      

  3.   

    1和3是一个问题,可以用timer定时去读取数据库.直接在ontimer里面写代码就行了.timer的机制是通过消息触发的,代码运行在主线程中,对数据库的操作不存在线程安全问题.第2个问题,不太明白.可能取出多条记录没错,那就看你想要怎么判断了.
      

  4.   

    第2个问题就是说我一次要从
    我的代码如下:
    procedure TMainForm.Timer2Timer(Sender: TObject);
    var
    VarTime,yjkssj,rwID,zxrbs:string; //VarTime是变化时间
    begin
     VarTime := dateTostr(now)+' '+timetostr(Time);
     //查询任务预计开始时间
     with ADOQuery4 do
      begin
        close;
        SQl.Clear;
        SQL.Add('select a.jhgzbs rwID,yjkssj,zxrbs from hrp_xmjhb a,hrp_rwzxrb b where a.jhgzbs=b.jhgzbs and rwlxbs=2 and rwztbs=6');
        open;
        if adoquery4.RecordCount>0 then
        while not adoquery1.Eof do
        begin
          rwID:=adoquery1.FieldByName('rwID').AsString;
          yjkssj:=adoquery1.FieldByName('yjkssj').AsString;
          zxrbs:=adoquery1.FieldByName('zxrbs').AsString;
          if yjkssj=VarTime then
             begin
               with ADOQuery3 do
                begin
                 Close;
                 SQL.Clear;
                 SQL.Add('update hrp_fpgzb set cybs= '''+zxrbs+''' where jhgzbs='''+rwID+'''');
                 ExecSQL;
                end;
                with ADOQuery3 do
                begin
                 Close;
                 SQL.Clear;
                 SQL.Add('update hrp_xmjhb set rwlxbs=3,rwztbs=7 where jhgzbs='''+rwID+'''');
                 ExecSQL;
                end;
                timer2.Enabled:=false;
                showmessage('任务已分配');
             end;
          ADOQuery4.Next;
          end;
        end;
    end;
      

  5.   

    上面的  rwID:是任务ID
     yjkssj:是预计开始时间
     思想是这样的我想在while not adoquery1.Eof do 循环中判断当前时间和从数据库中取出的yjkssj时间是否相同
    如果相同的话执行上面写的那些语句
    就是说每次都取出多条记录,依次来判断,不设定timer的interval时间可以实现我说的功能吗
    楼上我刚才发的有点错误:
    修改如下:
    procedure TMainForm.Timer2Timer(Sender: TObject); 
    var 
    VarTime,yjkssj,rwID,zxrbs:string; //VarTime是变化时间 
    begin 
    VarTime := dateTostr(now)+' '+timetostr(Time); 
    //查询任务预计开始时间 
    with ADOQuery1 do 
      begin 
        close; 
        SQl.Clear; 
        SQL.Add('select a.jhgzbs rwID,yjkssj,zxrbs from hrp_xmjhb a,hrp_rwzxrb b where a.jhgzbs=b.jhgzbs and rwlxbs=2 and rwztbs=6'); 
        open; 
        if adoquery1.RecordCount>0 then 
        while not adoquery1.Eof do 
        begin 
          rwID:=adoquery1.FieldByName('rwID').AsString; 
          yjkssj:=adoquery1.FieldByName('yjkssj').AsString; 
          zxrbs:=adoquery1.FieldByName('zxrbs').AsString; 
          if yjkssj=VarTime then 
            begin 
              with ADOQuery3 do 
                begin 
                Close; 
                SQL.Clear; 
                SQL.Add('update hrp_fpgzb set cybs= '''+zxrbs+''' where jhgzbs='''+rwID+''''); 
                ExecSQL; 
                end; 
                with ADOQuery3 do 
                begin 
                Close; 
                SQL.Clear; 
                SQL.Add('update hrp_xmjhb set rwlxbs=3,rwztbs=7 where jhgzbs='''+rwID+''''); 
                ExecSQL; 
                end; 
                timer2.Enabled:=false; 
                showmessage('任务已分配'); 
            end; 
          ADOQuery1.Next; 
          end; 
        end; 
    end;
    大家看一下这个有什么问题吗