Stworzyłem najprostszą usługę, która ma za zadanie pobierać dane z bazy.
Niestety przy uruchomieniu usługi jej stan zmienia się Od razu na Zatrzymany.
Problem mam z tworzeniem komponentów, którymi chciałbym się połączyć z bazą danych. Konkretniej jeżeli kod w
ServiceStart
zostanie zakomentowany + linijka w
ServiceStartServiceExecute
AdoQuery.ExecSQL;
to usługa się uruchamia i wykonuje (zapis do pliku).
Lecz wystarczy że odkomentuję linijkę
ADOconnection:=TADOConnection.Create(Nil);
to usługa nie może zostać uruchomiona.
Ktoś wie dlaczego ??
unit MyServiceGood;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
ExtCtrls, DB, ADODB, DBTables;
type
T_BezWatku = class(TService)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceExecute(Sender: TService);
private
ADOConnection: TADOConnection;
ADOQuery: TADOQuery;
{ Private declarations }
procedure InsertInFile;
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
_BezWatku: T_BezWatku;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
_BezWatku.Controller(CtrlCode);
end;
function T_BezWatku.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure T_BezWatku.InsertInFile;
const
FileName = 'C:\_Moje_Projekty\Usługa\_PrawdilowaBezWatku\Log.txt';
var
F : TextFile;
begin
try
AssignFile(F, FileName);
try
if FileExists(FileName) then
Append(F)
else
Rewrite(F);
Writeln(F, DateTimeToStr(Now), ' ', DiskFree(0));
finally
CloseFile(F);
end;
except
end;
end;
procedure T_BezWatku.ServiceStart(Sender: TService; var Started: Boolean);
begin
ADOconnection:=TADOConnection.Create(Nil);
ADOconnection.ConnectionString:='String do bazy';
ADOQuery:=TADOQuery.Create(Nil);
ADOQuery.Connection:=ADOConnection;
ADOQuery.SQL.Text := 'Select 1';
end;
procedure T_BezWatku.ServiceExecute(Sender: TService);
begin
while not Terminated do
Begin
AdoQuery.ExecSQL;
_BezWatku.InsertInFile;
ServiceThread.ProcessRequests(True);
Sleep(1000);
End;
end;
end.