Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exception wird nicht angezeigt (https://www.delphipraxis.net/45436-exception-wird-nicht-angezeigt.html)

Die Muhkuh 6. Mai 2005 10:54


Exception wird nicht angezeigt
 
Hi,

Delphi-Quellcode:
uses
  xmldom, XMLIntf, msxmldom, XMLDoc, SysUtils;

type
  EXMLException = Exception;

...
// Eine Procedure
  try
    FXML.LoadFromFile(FFileName); // Hier passiert ein Fehler
  except
    DoError('Datei "%s" konnte nicht geladen werden!' + #13#10 +
      'Bitte überprüfen Sie den Pfad!', [FFilename]);
  end;
...

procedure TXML.DoError(M: String; const Args: array of const);
begin
  EXMLException.Create(Format(M, Args));
end;
Eigentlich sollte doch die Exception angezeigt werden, aber die kommt nicht. Es wird in den Except-Block gesprungen, dann steht der Debugger auf "DoError" und überspingt das dann einfach, wenn ich wieder F7 drück.

Der Code steht in einer Unit (ohne eine DFM).

:hi:

Danke schon ma im Vorraus ;)

Neelix 6. Mai 2005 11:03

Re: Exception wird nicht angezeigt
 
Ich denke mal nur eine neue Exception erstellen reicht nicht. Du mußt dies dann auch "werfen" (mit raise).

Die Muhkuh 6. Mai 2005 11:24

Re: Exception wird nicht angezeigt
 
Hi,

Delphi-Quellcode:
raise EXMLException.Create('Kann Datei nicht laden!');
geht leider auch nicht.

Der Code steht im except-block.

mirage228 6. Mai 2005 11:30

Re: Exception wird nicht angezeigt
 
Hi,

erstmal musst Du das auf jeden fall mit Raise schreiben.

Zudem würde ich eine Exception class immer so deklarieren (habe ich bisher nur so gesehen):
Delphi-Quellcode:
type
  EXMLException = class(Exception)
end;
mfG
mirage228

Die Muhkuh 6. Mai 2005 11:33

Re: Exception wird nicht angezeigt
 
Zitat:

Zitat von mirage228
Hi,

erstmal musst Du das auf jeden fall mit Raise schreiben.

Zudem würde ich eine Exception class immer so deklarieren (habe ich bisher nur so gesehen):
Delphi-Quellcode:
type
  EXMLException = class(Exception)
end;
mfG
mirage228

Hi,

jetzt bekomme ich, wenn ich durchsteppe, eine Meldung, aber, wenn ich das Programm so starte, bekomme ich diese nicht.

mirage228 6. Mai 2005 11:37

Re: Exception wird nicht angezeigt
 
Hi,

mein Testcode funktioniert ohne Beanstandungen:

Delphi-Quellcode:
type
  ENewException = class(Exception) end;

procedure RaiseError(const msg: string);
begin
  raise ENewException.Create(Msg);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Obj: TStringList;
begin
  try
    Obj := nil;
    Obj.Text := 'neu';
  except
    RaiseError('schwära fäla');
  end;
end;
mfG
mirage228

Luckie 6. Mai 2005 11:38

Re: Exception wird nicht angezeigt
 
Da du immer nur so Bruchstücke vom Code zeigst und man irgenwie nichts zusammenhängendes zu sehen bekommt, hier mal ein beispiel, wie man eine eigene Exception wirtft und behandelt.

Delphi-Quellcode:
type
  EInvalidPW = class(Exception);

const
  PASSWORD = 'test';

procedure CheckPWD(Pwd: String);
resourcestring
  rsInvalidPw = 'Passwort %s ist ungültig';
begin
  if Pwd <> PASSWORD then
    raise EInvalidPW.CreateFmt(rsInvalidPw, [Pwd]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    CheckPWD('tset');
  except
    on E: EInvalidPW do ShowMessage(E.Message);
  end;
end;

Die Muhkuh 6. Mai 2005 12:07

Re: Exception wird nicht angezeigt
 
Hi,

ich hab das Projekt ma an den mirage228 geschickt. Es ging keine Minute da hatte er die Lösung:

Delphi-Quellcode:
constructor TXML.Create(FileName: String; NodeName: String;
  CreateIfNotExists: Boolean);
var
  Temp: IXMLDocument;
begin
  FFileName := FileName;

  if CreateIfNotExists then
  begin
    if (not (FileExists(FFileName))) then
    begin
      TFileStream.Create(FFilename, fmCreate).Free;

      try
        with TStringList.Create do
        begin
          Add(Format('<%s>', [NodeName]));
          Add(Format('</%s>', [NodeName]));
          SaveToFile(FFilename);
          Free;
        end;
      except
        DoError('Fehler beim erstellen der Datei "%s"!', [FileName]);
      end;
    end;
  end;

  FXML := nil; // << Das hier hat gefehlt. Wenn man das weglässt, zeigt es die Exception NICHT an.

  try
    FXML := TXMLDocument.Create('G');
    FXML.LoadFromFile(FFileName);

    if (not (FXML.DocumentElement.NodeName = NodeName)) then
      DoError('Node "%s" nicht gefunden!', [NodeName]);
  except
    DoError('Datei "%s" konnte nicht geladen werden!' + #13#10 +
      'Bitte überprüfen Sie den Pfad!', [FFilename]);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz