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 = '
S'
then AType := '
StringValue' ;
if AType = '
I'
then AType := '
IntValue' ;
if AType = '
F'
then AType := '
FloatValue' ;
if AType = '
D'
then 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?