Announcement

Collapse
No announcement yet.

Programm als Dienst

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

  • Programm als Dienst

    Hallo,
    ich habe folgendes Problem.
    Lasse ich mein Programm als Dienst ausführen, so läuft es nicht sauber durch. Führe ich die hingegen den Code in einer normalen Anwendung (kein Service) aus, funktioniert es.

    Ich habe einen Dienst in Delphi7 geschrieben, der folgendes macht, sobald er eine Anfrage bekommt:
    Code:
     try  
       
        ADOQuery1.Filter := 'MSGTIME = '02.02.2004' 
        ADOQuery1.Filtered := true;
     
        MemTable1.LoadFromDataSet(ADOQuery1,[]);
         
        Result := true;
      except
    
        on e:Exception  do
        begin
          WriteToLog('C:\Temp\fehler.log',e.Message);
          Result := false;
        end;
    
      end;
    Mein Dienst bekommt per indy UPDServer/UDPClient eine Anfrage gesendet, filtert aufgrund meiner gesendeten Daten die ADO Query und lädt das Ergebnis in einen memoryTable. Leider kommt es dabei zu einer Exception.
    Die Fehlermeldung lautet:
    "[Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben".

    Wie gesagt, passiert das nicht, wenn ich den Code innerhalb eines normalen Programmes aufrufe.

    Könnte mir jemand einen Tip geben bitte?
    Vielen Dank.
    jack

  • #2
    Wie erfolgt die Anmeldung an der Datenbank?

    Ein Dienst hat oft keine 'vertrauenswürdige Verbindung'.

    Poste ggf. mal den Anmeldecode.

    gruß
    Tino
    Ich habs gleich!
    ... sagte der Programmierer.

    Comment


    • #3
      Der Connection-String von meiner ADO lautet folgendermaßen:
      Code:
      Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=firebird;Driver=Firebird/InterBase(r) driver;Dbname=localhost:c:\firebird.FDB;CHARSET=NONE;UID=SYSDBA;Client=C:\WINDOWS\system\fbclient.dll;"
      Ich kann auch über den Object-Inspector die Datenbank auf Active setzen, ohne, dass eine Fehlermeldung erscheint. Jedoch funktioniert das nicht mehr, wenn mein Dienst startet und dann die Datenbank auf Active setzen will...

      Vielen Dank.

      Comment


      • #4
        Dein DNS-Eintrag muss als System-DSN-Eintrag vorhanden sein. Als Benutzer-DSN-Eintrag kann ihn der Dienst nicht sehen da der Dienst ja i.d.R. nicht unter deinem Konto läuft.

        Comment


        • #5
          Vielen Dank für die Antwort, genau das war mein Problem.
          Echt super, nochmals Danke.

          Comment

          Working...
          X