Einzelnen Beitrag anzeigen

Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#21

Re: Serviceanwendung treibt mich in den Wahnsinn

  Alt 6. Dez 2005, 09:38
So, ich hab nun mal den Dienst interaktiv laufen, und hab die Prozedur gefunden, in der es manchmal zu Problemen führt:
Delphi-Quellcode:
function TFileArchiever.GetValueParams (AName, AType : string) : string ;
var
 qry : TQuery ;
 C : integer ;
begin
      try
          qry := TQuery.Create (Self) ;
          qry.DatabaseName := DatabaseName ;

          AType := uppercase(AType) ;
          if AType = 'Sthen AType := 'StringValue' ;
          if AType = 'Ithen AType := 'IntValue' ;
          if AType = 'Fthen AType := 'FloatValue' ;
          if AType = 'Dthen AType := 'DateTimeValue' ;
          with qry do begin
              close ;
              sql.text := format ('select %s from Params where VarName = ''%s''',
                        [AType,AName]) ;

              { Diese Message wird noch gezeigt }
              showmessage (sql.text) ;

              { Hier kommt es wohl zu einem Fehler }
              open ;

              Showmessage (FieldByName (AType).AsString) ;
              { >>> Dieses Feld ist leer, warum? Die Query stimmt }
              {     Die Showmessage erscheint nicht mehr }

              Showmessage ('Params table opened') ;
              if not (EOF and BOF) then begin
                 Result := FieldByName (AType).AsString ;
                 if (copy(Result,length(Result),1) <> '\') and (Result <> '')
                 then Result := Result + '\' ;
              end else begin
                 Result := '' ;
              end ;
              close ;
              Showmessage ('The Value: ' + Result) ;
              if not (DirectoryExists (Result))
              then ForceDirectories (Result) ;
          end ;
      finally
          qry.free ;
      end ;
end ;
Es ist wohl in Zeile 24 beim Öffnen der Tabelle, wo es zu einem Fehler kommt. Ich würd mir ja mal gern die Fehlermeldung anzeigen lassen, nur wie? Ein Umbiegen von application.OnException gibts nicht bei Serviceanwendungen.

Die Query ist so vollkommen in Ordnung, die Rechte sind im SQL Server auch für das SYSTEM Konto korrekt vergeben.

In der Query rufe ich lediglich einen Wert aus der Tabelle "Params" ab, die aber rein gar nichst mit einem Recordlock zu tun haben kann, da ich 1. überhaupt von nirgends sonstwo auf diese Tabelle zugreife, und 2. wenn doch, dann wirklich höchstens lesend, da es nur eine Nachschlagtabelle ist.

Ist das jetzt Zufall, dass der Dienst gerade in dieser Zeile seine Arbeit verweigert, und der Fehler sonstwo im Detail liegt, der spinn ich nun vollends und hab da wirklich im geposteten Code was falsch gemacht?
  Mit Zitat antworten Zitat