Announcement

Collapse
No announcement yet.

Ado in einem NTDienst

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ado in einem NTDienst

    Hallo,

    wir versuchen hier einen NT Dienst mit Delphi 6 zu entwickeln.
    Der Dienst laeuft schon, ABER ein ADO oder auch dbExpress Connect
    auf eine Oracle DB bekommen wir nicht zum laufen.
    Wir finden keinen Beipiel Code (nicht mal im Internet!)...

    Wir wollen Daten aus einer Oracle DB auslesen und in eine MYSQL DB schreiben!

    kann uns jemand HELFEN
    DANKE
    Karl Schwaegerl

  • #2
    Hallo,

    die Ursache für dieses Problem kann nicht an ADO und auch nicht am NT-Dienst liegen, denn das folgende Beispielprojekt kann bei mir (Delphi 5 SP 1 und Windows 2000) erfolgreich auf eine entfernte MS SQL Server 2000-Datenbank zugreifen und Daten auslesen:
    <pre>
    unit OSSrvTest_Impl;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;

    type
    TService1 = class(TService)
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceContinue(Sender: TService; var Continued: Boolean);
    procedure ServicePause(Sender: TService; var Paused: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
    private
    { Private-Deklarationen }
    public
    function GetServiceController: TServiceController; override;
    { Public-Deklarationen }
    end;

    TTestThread = class(TThread)
    public
    procedure Execute; override;
    end;

    var
    Service1: TService1;

    implementation

    {$R *.DFM}

    uses ActiveX, ADOInt;

    const
    cCS = 'Provider=SQLOLEDB.1;Password=;User ID=sa;' +
    'Initial Catalog=Northwind;Data Source=P4W2K';

    var
    TestThread : TTestThread; // Service-Thread erledigt die Arbeit
    sLastAction : String;

    procedure ServiceController(CtrlCode: DWord); stdcall;
    begin
    Service1.Controller(CtrlCode);
    end;

    function TService1.GetServiceController: TServiceController;
    begin
    Result := ServiceController;
    end;

    { -----------------------------------------------------------}
    { Service soll die Arbeit in einem eigenen Thread verrichten }
    { -----------------------------------------------------------}

    procedure TTestThread.Execute;
    const
    FILENAME = 'C:\SRVTEST.LOG';
    var
    aConnection : _Connection;
    aRS : _Recordset;
    iCount : Integer;
    aFile : TextFile;
    sInfo : String;
    begin
    iCount := 0;
    CoInitialize(nil);
    try
    aConnection := CoConnection.Create;
    aConnection.CursorLocation := adUseClient;
    aConnection.Open(cCS, '', '', adOpenForwardOnly);
    aRS := CoRecordset.Create;
    aRS.CursorLocation := adUseClient;
    while not Terminated do
    begin
    Inc(iCount);
    aRS.Open('SELECT ProductName FROM dbo.Products WHERE ProductID = ' +
    IntToStr(iCount),
    aConnection, adOpenStatic, adLockReadOnly , 0);
    sInfo := VarToStr(aRS.Collect[0]);
    aRS.Close;
    AssignFile(aFile, FILENAME);
    if FileExists(FILENAME) then
    Append(aFile)
    else
    ReWrite(aFile);
    WriteLn(aFile, FormatDateTime('dd.mm.yyyy hh:nn:ss', Now) + sInfo);
    CloseFile(aFile);
    Sleep(5000);
    end;
    aRS := nil;
    aConnection.Close;
    finally
    CoUninitialize;
    end;
    end;

    procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
    begin
    sLastAction := ' (ServiceStart)';
    TestThread := TTestThread.Create(False);
    Started := True;
    end;

    procedure TService1.ServiceContinue(Sender: TService;
    var Continued: Boolean);
    begin
    sLastAction := ' (ServiceContinue)';
    TestThread.Resume;
    Continued := TRUE;
    end;

    procedure TService1.ServicePause(Sender: TService; var Paused: Boolean);
    begin
    TestThread.Suspend;
    Paused := TRUE;
    end;

    procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
    begin
    TestThread.Terminate;
    Stopped := TRUE;
    end;

    end.
    </pre>
    Ergebnis in der Logdatei:
    <pre>
    14.03.2002 07:37:11Chai
    14.03.2002 07:37:16Chang
    14.03.2002 07:37:21Aniseed Syrup
    14.03.2002 07:37:26Chef Anton's Cajun Seasoning
    14.03.2002 07:37:31Chef Anton's Gumbo Mix
    </pre&gt

    Comment


    • #3
      Hallo Andreas K

      herzlichen DANK fuer die Info

      Karl Schwaeger

      Comment

      Working...
      X