![]() |
Re: Serviceanwendung treibt mich in den Wahnsinn
So, ich hab nun mal den Dienst interaktiv laufen, und hab die Prozedur gefunden, in der es manchmal zu Problemen führt:
Delphi-Quellcode:
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.
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 ; 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? |
Re: Serviceanwendung treibt mich in den Wahnsinn
Hallo Jelly,
welchen Wert hat denn AName? Vielleicht hast Du dort ein Feld, das mit einem reservierten Namen benannt ist (z.B. "USER")? Dann solltest Du das Format so anwenden (mit doppelten Hochkomma):
Delphi-Quellcode:
Des weiteren könntest Du versuchen, den Fehler weiter einzugrenzen:
sql.text := format ('select "%s" from Params where VarName = ''%s''',
[AType,AName]) ;
Delphi-Quellcode:
Ausserdem kannst Du AFAIK doch einen generellen Exception-Handler einsetzen:
try
open; except on e : exception do begin ShowMessage(e.Message); end; end;
Delphi-Quellcode:
uses Forms;
type ... procedure MyGlobalExptionHandler(Sender : TObject; E: Exception); ... Forms.Application.OnException := MyGlobalExceptionHandler; |
Re: Serviceanwendung treibt mich in den Wahnsinn
Zitat:
SQL-Code:
select StringValue from Params where Varname = 'Path EMails Root'
Zitat:
Code:
Keinen Schimmer, was das jetzt heisst. Werd mal bischen googeln. Auf jeden Fall scheint mir wirklich die BDE diese Kopfzerbrechen zu bereiten. Jetzt weiss ich auch was BDE heisst:
BDE error $000F
Blöde Datenbank Exceptions :mrgreen: EDIT: Sorry, hatte falschen Error Code gepostet. |
Re: Serviceanwendung treibt mich in den Wahnsinn
Hab jetzt mal
![]() Zitat:
Jetzt hab ich ein echtes Problem, denn ich bin mit meinem Delphi 4 gezwungen über die BDE auf den SQL Server zuzugreifen. |
Re: Serviceanwendung treibt mich in den Wahnsinn
Zitat:
|
Re: Serviceanwendung treibt mich in den Wahnsinn
Ich hab den Service mal testweise auf dem Server angeschmissen, und da lief er auch nicht. Ich bin deshalb auf die BDE beschränkt, weil die Umstellung auf ADO oder noch besser direkt auf native MSSQL Komponenten (bsp. SDAC von
![]() Ich hab mir jetzt mal die Params Tabelle genauer unter die Lupe genommen, und da hat ist die Spalte Stringvalue als varchar(300) definiert. Damit scheint die BDE Probleme zu haben. Ich hab die Länge jetzt auf 255 heruntergesetzt, und siehe da, es klappt. Zumindest was die ersten Tests angehen. Ist die Länge grösser als 255, so wird von der BDE ein Blob übertragen, das z.B. in einem Memofeld eingetragen werden kann. Es ist aber trotzdem noch seltsam, dass ich genau die gleiche Routine im Programm an diversen anderen Stellen anwende, und noch nie Probleme hatte. Also die BDE hat nicht zu unrecht den Ruf, dass sie doch ganz schön in die Jahre gekommen ist. Nun ja, ich befürchte früher oder später wird wohl doch auf ein anderes System umgesattelt werden müssen. Danke für alle Bemühungen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz