用Delphi写了个服务程序。需要定时执行些数据库操作。
    在ServiceExecute中直接写了数据库的操作,起服务后报异常错误。去掉问题代码后,正常。但是也了我需要的操作。
如何解决?代码如下
服务程序中定义了如下控件  TFrm= class(TService)
    ADOConn: TADOConnection;
    ADOCmd: TADOCommand;
    ADOQry: TADOQuery;……procedure TFrm.ServiceExecute(Sender: TService);
var
tem:string;
begin
  while not Terminated do
  begin
    Sleep(5000);
    tem :='test';
    tem := GetValueNoPar('select count(1) as R from airline_pay');  //执行查询操作。加上这句就出问题
    SaveDIYLog(tem,'Sys.log',True);  //操作写入日志
    ServiceThread.ProcessRequests(False);
  end;
end;function TFrm.GetValueNoPar(SQL: string): string;
var
  TemDataSet: TADOQuery;
begin  
  TemDataSet := TADOQuery.Create(nil);
  try
    TemDataSet.Connection := ADOConn;
    TemDataSet.Close;
    TemDataSet.SQL.Text := SQL;
    TemDataSet.Open;
    Result := TemDataSet.FieldByName('R').AsString;
  finally
    TemDataSet.Free;
  end;
end;

解决方案 »

  1.   

    to diecode:
    提示如下
    应用程序发生异常 未知的软件异常(0x0eeddfade),位置为0x7c812afbto sz_haitao:
    能否再说详细一点?coinit....是神马?
      

  2.   

    初始化时:
      CoInitialize(nil);
    退出时:
      CoUnInitialize;
      

  3.   


    试出来了
    procedure THFControlSystem.ServiceExecute(Sender: TService);
    var
    tem:string;
    begin
      while not Terminated do
      begin
        Sleep(5000);
        CoInitialize(nil);  //这里,就是这里    tem :='test';
        tem := TemConnGetValueNoPar('select count(1) as R from table);
        CoUnInitialize;//这里,就是这里    SaveDIYLog(tem,'Sys.log',True); 
        ServiceThread.ProcessRequests(False);
        
      end;
    end;服务程序本身就是起了线程的。感谢楼上各位。结贴放分了。