Usługa nie może zostać uruchomiona - dlaczego (Pobieranie danych z bazy danych)?

0

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.


1

Przechwyć excepta i zapisz do logu.

0
satq napisał(a):

Przechwyć excepta i zapisz do logu.

Problemem było:
brak CoInitialize(nil);

0

A w ogóle jest połączenie z bazą? Bo jakoś nie widzę łączenia...

0
kAzek napisał(a):

A w ogóle jest połączenie z bazą? Bo jakoś nie widzę łączenia...

A co, jeśli w connectstring jest faktycznie 'String do bazy' ?
bo ścieżka do pliku ...., jak ścieżka do pliku...
sql też się waliduje... :)
Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1