^_^,有人中招了,本人曾提同样问题,出一百分,结果是我自己搞定的,分只好给了有苦劳的朋友们:~(
(言下之意,你是不是会给我100大洋)program Project1;uses
  SvcMgr,
  Unit1 in 'Unit1.pas' {sSetData: TService},
  Unit2 in 'Unit2.pas';{$R *.RES}begin
  Application.Initialize;
  Application.Title := 'Auto Refresh CallCenter';
  Application.CreateForm(TsSetData, sSetData);
  Application.Run;
end.
//////////////////////////////////////////////////////
unit Unit2;interfaceuses
  Classes,SysUtils;type
  tSetData = class(TThread)
  private
    { Private declarations }
    function GetData:Integer;
    function SetData:Boolean;
    procedure setDataTG;
  protected
    procedure Execute; override;
  end;implementation  uses Unit1;procedure tSetdata.setDataTG;
begin
end;function tSetData.Getdata:Integer;
begin
  Getdata:=0;
  try
    if sSetData.adoCC.Connected then
      sSetData.adoCC.Close;
    sSetData.adoCC.Open('sa','');
    if sSetData.adoCC.Connected then
    begin
      try
        if sSetData.aqGroup.Active then
          sSetData.aqGroup.Close;
        sSetData.aqGroup.SQL.Clear;
        sSetData.aqGroup.SQL.Add('select count(*) from cc_group where delete_flag=''0'' and donemodify=''0'' and checkenable=''1'' and edatetime<getdate()');
        sSetData.aqGroup.Open;
        if not sSetData.aqGroup.Eof then
          Getdata:=sSetData.aqGroup.Fields[0].AsInteger;
        sSetData.aqGroup.Close;
      finally
        sSetData.adoCC.Close;
      end;
    end;
  except
    on E:Exception do WriteLog(E.Message+' In GetData');
  end;
end;function tSetData.SetData:Boolean;
var
  i,j:Integer;
begin
  SetData:=True;
  try
    if sSetData.adoCC.Connected then
      sSetData.adoCC.Close;
    sSetData.adoCC.Open('sa','');
    if sSetData.adoCC.Connected then
    begin
      try
        if sSetData.aqTree.Active then
          sSetData.aqTree.Close;
        sSetData.aqTree.SQL.Clear;
        sSetData.aqTree.SQL.Add('update cc_tree');
        sSetData.aqTree.SQL.Add('set cc_tree.last_cc_termopt=cc_tree.cc_termopt,');
        sSetData.aqTree.SQL.Add('cc_tree.cc_termopt=cc_tree.future_cc_termopt,');
        sSetData.aqTree.SQL.Add('cc_tree.termddi=cc_tree.future_ddi');
        sSetData.aqTree.SQL.Add('from cc_tree, cc_group');
        sSetData.aqTree.SQL.Add('where cc_tree.cc_dnis in (select distinct cc_group.ddi from cc_group');
        sSetData.aqTree.SQL.Add('where cc_group.edatetime<getdate() and');
        sSetData.aqTree.SQL.Add('cc_group.delete_flag=''0'' and');
        sSetData.aqTree.SQL.Add('cc_group.donemodify=''0'' and');
        sSetData.aqTree.SQL.Add('cc_group.checkenable=''1'')');
        i:=sSetData.aqTree.ExecSQL;
        if sSetData.aqGroup.Active then
          sSetData.aqGroup.Close;
        sSetData.aqGroup.SQL.Clear;
        sSetData.aqGroup.SQL.Add('update cc_group set cc_group.donemodify=''1''');
        sSetData.aqGroup.SQL.Add('where cc_group.edatetime<getdate() and');
        sSetData.aqGroup.SQL.Add('cc_group.delete_flag=''0'' and');
        sSetData.aqGroup.SQL.Add('cc_group.donemodify=''0'' and');
        sSetData.aqGroup.SQL.Add('cc_group.checkenable=''1''');
        j:=sSetData.aqGroup.ExecSQL;
        WriteLog('Modify OK: '+IntToStr(i)+' records have been modified in "cc_tree"');
        WriteLog('Modify OK: '+IntToStr(j)+' records have been modified in "cc_group"');
      finally
        sSetData.adoCC.Close;
      end;
    end;
  except
    on E:Exception do
    begin
      SetData:=False;
      WriteLog(E.Message+' In SetData');
    end;
  end;
end;procedure tSetData.Execute;
begin
  FreeOnTerminate := True;
  while not Terminated do
  begin
    Synchronize(SetDataTG);
    sleep(60000);
  end;
end;end.
///////////////////////////////////////////////
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Controls, SvcMgr,
  ExtCtrls, DB, ADODB,ActiveX;type
  TsSetData = class(TService)
    adoCC: TADOConnection;
    aqTree: TADOQuery;
    aqGroup: TADOQuery;
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
    procedure ServicePause(Sender: TService; var Paused: Boolean);
    procedure ServiceShutdown(Sender: TService);
    procedure ServiceExecute(Sender: TService);
    procedure ServiceContinue(Sender: TService; var Continued: Boolean);
    procedure ServiceCreate(Sender: TObject);
    procedure ServiceDestroy(Sender: TObject);
    procedure ServiceBeforeInstall(Sender: TService);
  private
    { Private declarations }
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  end;var
  sSetData: TsSetData;
  LogFile:string;  function WriteLog(sInfo:string):Boolean;implementation  uses unit2;{$R *.DFM}function WriteLog(sInfo:string):Boolean;
var
  i:Integer;
  dwSize:LongInt;
  FileHandle:Integer;
  strToWrite:string[255];
begin
  WriteLog:=True;
  try
    if FileExists(LogFile) then
    begin
      FileHandle:=FileOpen(LogFile,fmOpenReadWrite);
      dwSize:=GetFileSize(FileHandle,nil);
      if dwSize>$800000 then
      begin
        FileClose(FileHandle);
        DeleteFile(LogFile);
        FileHandle := FileCreate(LogFile,fmOpenReadWrite);
      end;
    end
    else
      FileHandle := FileCreate(LogFile,fmOpenReadWrite);
    if FileHandle<>0 then
    begin
      try
        SetLength(strToWrite,255);
        strToWrite:=DateToStr(Date)+' '+TimeToStr(Time)+ ' >> '+sInfo+#13#10;
        FileSeek(FileHandle,0,2);
        for i:=1 to Length(strToWrite) do
        FileWrite(FileHandle,strToWrite[i],sizeof(strToWrite[i]));
      finally
        FileClose(fileHandle);
      end;
    end;
  except
    WriteLog:=False;
  end;
end;procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  sSetData.Controller(CtrlCode);
end;function TsSetData.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;procedure TsSetData.ServiceStart(Sender: TService; var Started: Boolean);
begin
  LogFile:=ExtractFilePath(paramstr(0))+'SetData.Log';
  try
    CoInitialize(nil);
    if not adoCC.Connected then
      adoCC.Open('sa','');
    if adoCC.Connected then
    begin
      mySetDataThread:=tSetData.Create(False);
      Started:=True;
      adoCC.Close;
    end
    else
    begin
      Started:=false;
    end;
  except
    on E:Exception do
    begin
      Writelog(E.Message+' In ServiceStart');
      Started:=false;
      raise E;
    end;
  end;
  WriteLog('ServerStart');
end;procedure TsSetData.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  WriteLog('ServerStop');
  mySetDataThread.Terminate;
  Stopped:=True;
  CoUninitialize;
end;procedure TsSetData.ServicePause(Sender: TService; var Paused: Boolean);
begin
  WriteLog('ServerPause');
  mySetDataThread.Suspend;
  Paused:=True;
end;procedure TsSetData.ServiceShutdown(Sender: TService);
begin
  mySetDataThread.
  WriteLog('ServerShutdown');
end;procedure TsSetData.ServiceExecute(Sender: TService);
begin
  WriteLog('serverExecute');
end;procedure TsSetData.ServiceContinue(Sender: TService;
  var Continued: Boolean);
begin
  WriteLog('ServerContinue');
  mySetDataThread.Resume;
  Continued:=True;
end;procedure TsSetData.ServiceCreate(Sender: TObject);
begin
  WriteLog('ServerCreate');
end;procedure TsSetData.ServiceDestroy(Sender: TObject);
begin
  WriteLog('ServerDistroy');
end;procedure TsSetData.ServiceBeforeInstall(Sender: TService);
begin
  LogFile:=ExtractFilePath(paramstr(0))+'SetData.Log';
end;end.
//////////////////////////////////////////////////