Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi try except in Funktion funktioniert nicht (https://www.delphipraxis.net/86974-try-except-funktion-funktioniert-nicht.html)

Mazel 21. Feb 2007 17:55


try except in Funktion funktioniert nicht
 
Hallo,

ich habe eine Funktion, die einen DateTime in Unix umwandelt. Dazu nutze ich zwar DateTimeToUnix aus der Unit DateUtils, aber ich habe dies, um nicht immer wieder zu schreiben, in einer anderen Funktion gelagert, nur so funktioniert das try except nicht. Schreibe ich das jedesmal in das OnChange Ereignis, dann funktioniert es, ich würde es aber gern einfacher machen in dem ich es in eine von mir erstellte Funktion lagere:
Delphi-Quellcode:
// so gehts nicht:
function DateTimeToUnixTime(DateTime: TDateTime): String;
begin
  try
    Result := IntToStr(DateTimeToUnix(DateTime));
  except
    Result := IntToStr(DateTimeToUnix(0));
  end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  Edit2.Text := DateTimeToUnixTime(StrToDateTime(Edit1.Text));
end;


// so gehts:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  try
    Edit2.Text := IntToStr(DateTimeToUnix(StrToDateTime(Edit1.Text)));
  except
    Edit2.Text := IntToStr(DateTimeToUnix(0));
  end;
end;
Weis jemand Rat?

Gruß
Mazel

Konse 21. Feb 2007 18:21

Re: try except in Funktion funktioniert nicht
 
was funktioniert den daran nicht genau?
also der unterschied zwischen deine beiden dingen ist:
Delphi-Quellcode:
try
  Edit1.Text := IntToStr(DateTimeToUnix(
     StrToDateTime(Edit1.Text) // hier wird auch eine exception geworfen falls du kein gültiges datum hast
    ));
  except
    Edit1.Text := IntToStr(DateTimeToUnix(0));
  end;
bei deinem anderem beispiel jedoch nicht
Delphi-Quellcode:
function DateTimeToUnixTime(DateTime: TDateTime): String;
begin
  try
    Result := IntToStr(DateTimeToUnix(DateTime));
  except
    Result := IntToStr(DateTimeToUnix(0));
  end;
end;
dort kann jetzt immernoch ein fehler passieren in :

Delphi-Quellcode:
Edit1.Text := DateTimeToUnixTime(
       StrToDateTime(Edit1.Text) // hier kann auch eine exception geworfen werden diese fängst du nicht ab
);

hoffe ich konnte dir helfen

gruß Konse

Mazel 21. Feb 2007 18:29

Re: try except in Funktion funktioniert nicht
 
Mein Ziel war es mit try except den Fehler, wenn kein gültiges Datum im Editfeld steht, abzufangen und dann den Wert von DateTimeToUnix(0) auszugeben. Wenn ich den Code dazu in das OnChange Ereignis schreibe funktioniert dies auch. Nun dachte ich, weil ich die Funktion öfter vwerwende, diese in eine extra Funktion zu lagern damit für mich der Zugriff und Überblick einfacher wird. Jedoch funktioniert dies leider nicht. Ich dachte, das try except würde genau so reagieren wie im OnChange Ereignis, das tut es scheinbar aber nicht.

mkinzler 21. Feb 2007 18:32

Re: try except in Funktion funktioniert nicht
 
Du könntest auch die Exception verhindern, wenn du TryStrToDateTime() verwenden würdest

Mazel 21. Feb 2007 18:50

Re: try except in Funktion funktioniert nicht
 
Danke für den Tipp, das funktioniert.

Gruß
Mazel

Konse 21. Feb 2007 19:57

Re: try except in Funktion funktioniert nicht
 
Zitat:

Zitat von Mazel
Nun dachte ich, weil ich die Funktion öfter vwerwende, diese in eine extra Funktion zu lagern damit für mich der Zugriff und Überblick einfacher wird. Jedoch funktioniert dies leider nicht. Ich dachte, das try except würde genau so reagieren wie im OnChange Ereignis, das tut es scheinbar aber nicht.

das try except reagiert richtig.
nur du hast deine funktion falsch geschrieben.

wenn du dir den code den ich dir da geschickt habe bzw. die kommentare anschaust, dann
solltest du es sehen.


Delphi-Quellcode:
Edit1.Text := DateTimeToUnixTime(
       StrToDateTime(Edit1.Text) // hier kann auch eine exception geworfen werden diese fängst du nicht ab
);
hättest du das strToDateTime in deine Funktion gesteckt und deine funktion so aufgebaut:
Delphi-Quellcode:
function DateTimeToUnixTime(DateTime: string): String;
begin
  try
    Result := IntToStr(DateTimeToUnix(StrToDateTime(DateTime)));
  except
    Result := IntToStr(DateTimeToUnix(0));
  end;
end;
hätte es so funktioniert wie du es haben wolltest, da die exception jetzt innerhalb
deines try except blockes auftritt.
vorher hattest du diese nicht gecatched!

beste grüße
konse

Mazel 21. Feb 2007 21:10

Re: try except in Funktion funktioniert nicht
 
Danke für diese Information. Das wusste ich nicht. Jetzt ist es aber klar, dass der Fehler durch StrToDateTime verursacht wird.

Was heißt denn gecatched?

Konse 21. Feb 2007 21:12

Re: try except in Funktion funktioniert nicht
 
dass du eine mögliche Exception mit hilfe eines try ... except/finally block abfängst .

mkinzler 21. Feb 2007 21:13

Re: try except in Funktion funktioniert nicht
 
Zitat:

Was heißt denn gecatched?
Im sinne von abgefangen (in anderen Sprachen Aquivalent zu except)

Mazel 21. Feb 2007 21:15

Re: try except in Funktion funktioniert nicht
 
Ich danke euch für die superschnellen superguten Antworten. :thumb:

Gruß
Mazel


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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