用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;
在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;
提示如下
应用程序发生异常 未知的软件异常(0x0eeddfade),位置为0x7c812afbto sz_haitao:
能否再说详细一点?coinit....是神马?
CoInitialize(nil);
退出时:
CoUnInitialize;
试出来了
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;服务程序本身就是起了线程的。感谢楼上各位。结贴放分了。