AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit ShowModal und Exception

Ein Thema von Jack and the Juice · begonnen am 18. Apr 2011 · letzter Beitrag vom 19. Apr 2011
Antwort Antwort
Jack and the Juice

Registriert seit: 15. Jan 2011
Ort: Lübeck
52 Beiträge
 
#1

Problem mit ShowModal und Exception

  Alt 18. Apr 2011, 22:56
Hallo,

seit kurzem tritt in meinem aktuellen Projekt (Datenbankverwaltung) ein eigenartiges Problem auf:
Ich rufe das Formular zum Bearbeiten eines Datensatzes mit ShowModal auf. Das Formular wird anstandslos geöffnet. Wenn alle Eingaben korrekt getätigt wurden, dann wird der Datensatz gespeichert und das Formular wieder geschlossen. Wenn allerdings eine Eingabe nicht korrekt getätigt wird und ich einen Fehler erhalte, tritt die Exception ein und ein Dialog informiert den Nutzer darüber, dass nicht alle benötigten Felder ausgefüllt wurden. Das Formular soll dann natürlich geöffnet bleiben, um weitere Eingaben zuzulassen ... und genau hier tritt das Problem auf. Im Fall einer Exception wird die Fehlermeldung angezeigt, das Formular wird aber trotzdem geschlossen, sprich die MainForm wird wieder angezeigt.

Delphi-Quellcode:
  try
    //Daten speichern ; hier tritt beispielsweise eine Exception auf, weil eine benötigte Eingabe fehlt o.ä.
    Form2.Close;

  except
    messagedlg(
      'Es ist ein Fehler aufgetreten. Bitte überprüfen Sie Ihre Eingaben.', mtError, [mbOK], 0);
    form1.ClientDataSet1.Delete;
  end;
So wie ich das verstehe, sollte das Formular nach obenstehendem Code im Fehlerfall nicht geschlossen werden oder bin ich da einem Irrtum aufgesessen?

Besten Dank schonmal,
Jackandthejuice
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: Problem mit ShowModal und Exception

  Alt 18. Apr 2011, 23:28
Delphi-Quellcode:
  try
    //Daten speichern ; hier tritt beispielsweise eine Exception auf, weil eine benötigte Eingabe fehlt o.ä.
    Form2.Close;

  except
    messagedlg(
      'Es ist ein Fehler aufgetreten. Bitte überprüfen Sie Ihre Eingaben.', mtError, [mbOK], 0);
    form1.ClientDataSet1.Delete;
  end;
So wie ich das verstehe, sollte das Formular nach obenstehendem Code im Fehlerfall nicht geschlossen werden oder bin ich da einem Irrtum aufgesessen?
Würde ich anders lösen. Deklariere im Datenmodul eine Funktion mit Boolean-Rückgabewert:

Delphi-Quellcode:
FUNCTION TDatenmodul1.DatensatzSpeichern(Sender: TObject) : BOOLEAN;
BEGIN
    try
      Dataset.Post;
      Result := TRUE;

    except
      Result := FALSE;
    end;
END;
Dann rufst du diese Function mittels entsprechendem Übernahme-Button auf:
Delphi-Quellcode:
PROCEDURE TFormEingabeModal.ButtonEingabenUebernehmenClick(Sender: TObject);
BEGIN
     IF Datenmodul1.DatensatzSpeichern(Sender)
     THEN CLOSE
     ELSE Showmessage('Es ist ein Fehler aufgetreten. Bitte überprüfen Sie Ihre Eingaben.');
END;
Als Alternative zum Übernahme-Button setzt du noch einen Cancel-Button auf dein Modalform, damit der Benutzer die Eingabe abbrechen kann:
Delphi-Quellcode:
PROCEDURE TFormEingabeModal.ButtonEingabenUebernehmenClick(Sender: TObject);
BEGIN
     CLOSE;
END;
Sieht dann ungefähr so aus.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Problem mit ShowModal und Exception

  Alt 19. Apr 2011, 06:36
Dafür gibt es OnCloseQuery.
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  try
    // machwas
  except
    CanClose := False;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Problem mit ShowModal und Exception

  Alt 19. Apr 2011, 08:04
Diese Art der Fehlerbehandlung ist eigentlich ein No-go, da man damit niemals den wahren Fehlergrund ermitteln kann. Dies kann die Fehlersuche unmöglich machen. Das erfreut dann sowohl Programmierer als auch Kunden
Die ursprüngliche Fehlermeldung sollte also nach wie vor einsehbar sein. Im einfachsten Falle hängt man einfach die Message an seine eigene. Oder man nutzt Nested Exceptions.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Problem mit ShowModal und Exception

  Alt 19. Apr 2011, 10:07
Diese Art der Fehlerbehandlung ist eigentlich ein No-go, da man damit niemals den wahren Fehlergrund ermitteln kann. Dies kann die Fehlersuche unmöglich machen. Das erfreut dann sowohl Programmierer als auch Kunden
Die ursprüngliche Fehlermeldung sollte also nach wie vor einsehbar sein. Im einfachsten Falle hängt man einfach die Message an seine eigene. Oder man nutzt Nested Exceptions.
Darum ging es aber nicht, das wäre ein anderes Thema.
  Mit Zitat antworten Zitat
Alt 19. Apr 2011, 10:16     Erstellt von Deep-Sea
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Streiterei entfernt. Daniel
Alt 19. Apr 2011, 10:23     Erstellt von Perlsau
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Streiterei entfernt. Daniel
Alt 19. Apr 2011, 10:30     Erstellt von Deep-Sea
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Streiterei entfernt. Daniel
Alt 19. Apr 2011, 10:38     Erstellt von Perlsau
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Streiterei entfernt. Daniel
Alt 19. Apr 2011, 10:44     Erstellt von Satty67
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Streiterei entfernt. Daniel
Alt 19. Apr 2011, 10:46     Erstellt von Deep-Sea
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Streiterei entfernt. Daniel
Alt 19. Apr 2011, 10:46     Erstellt von Perlsau
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Streiterei entfernt. Daniel
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Problem mit ShowModal und Exception

  Alt 19. Apr 2011, 11:07
Sodele. Ich habe mal eine Reihe an Beiträgen weggefegt, die mit der Frage nichts zutun hatten.

Der Fragesteller hat nun mehrere Möglichkeiten, mit der Thematik umzugehen. Und kann selbst entscheiden, wie tief er in das Thema "Exception-Handling" einsteigen will.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Problem mit ShowModal und Exception

  Alt 19. Apr 2011, 11:09
Sodele. Ich habe mal eine Reihe an Beiträgen weggefegt, die mit der Frage nichts zutun hatten.
Der Fragesteller hat nun mehrere Möglichkeiten, mit der Thematik umzugehen. Und kann selbst entscheiden, wie tief er in das Thema "Exception-Handling" einsteigen will.
Einwandfrei
  Mit Zitat antworten Zitat
Jack and the Juice

Registriert seit: 15. Jan 2011
Ort: Lübeck
52 Beiträge
 
#8

AW: Problem mit ShowModal und Exception

  Alt 19. Apr 2011, 17:23
Hallo,

zunächst vielen Dank an alle. Ich habe das Problem jetzt mit OnCloseQuery und ModalResult gelöst. Jetzt funktioniert es einwandfrei.

Zu der Diskussion bezüglich des Exception-Handlings: ich bin gerne bereit mehr zu lernen. Wenn also jemand Tippr und Tricks, am Besten in Tutorial-Form hat, dann immer her damit.

Besten Dank und Grüße aus Dänemark,
jackandthejuice
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Problem mit ShowModal und Exception

  Alt 19. Apr 2011, 17:37
Gern geschehen!
Ich habe die Diskussion nicht mitbekommen, aber was Deep-Sea wahrscheinlich gemeint hat, ist z.B.:
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  try
    // machwas
  except
    on e:Exception do
      begin
        CanClose := False;
        ShowMessage(
            'Da ist ein Fehler passiert.'
          + #13
          + 'Meldung: '
          + e.Message
          );
      end;
  end;
end;
sodaß man weiß, wie die Exception heißt. Man kann hier auch zwischen verschiedenen Exception-Arten unterscheiden, wenn man will. Bezüglich Detailreichtum der Meldung befrage Deine Phantasie

Bei meiner ersten Antwort ging es mir mehr darum, den Kern Deiner Frage zu treffen, als mit Exception-Handling vom Wesentlichen abzulenken.

HTH
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 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