Autor Téma: Výnimka ako parameter funkcie  (Přečteno 465 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5848
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Výnimka ako parameter funkcie
« kdy: 05-07-2021, 16:17:55 »
Toto funguje
Kód: Delphi [Vybrat]
  1. procedure EjstException.RaisingException(P: PExceptionRecord);
  2. begin
  3.   inherited;
  4.   FErrorMessage := oVerboseError.VerboseError(FErrorCode, Self.InnerException);
  5. end;
Ale toto nie. Prečo?
Kód: Delphi [Vybrat]
  1. procedure EjstException.RaisingException(P: PExceptionRecord);
  2. begin
  3.   inherited;
  4.   FErrorMessage := oVerboseError.VerboseError(FErrorCode, Self);
  5. end;
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5848
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Výnimka ako parameter funkcie
« Odpověď #1 kdy: 07-07-2021, 18:17:56 »
Nikto to nevie vysvetliť? Výnimka je volaná
Kód: Delphi [Vybrat]
  1. Exception.RaiseOuterException(EjstException.Create(EDB_Table_Post));
« Poslední změna: 07-07-2021, 18:19:52 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1556
  • Karma: 37
    • Pepak.net
Re:Výnimka ako parameter funkcie
« Odpověď #2 kdy: 08-07-2021, 06:05:11 »
"Toto funguje" a "Toto nefunguje" je naprosto nedostatečný popis.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5848
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Výnimka ako parameter funkcie
« Odpověď #3 kdy: 08-07-2021, 07:51:47 »

Mám na mysli toto:
Kód: Delphi [Vybrat]
  1. Self.ToString = ''
  2. Self.InnerException.ToString <> ''
Ten istý výsledok dostanem aj vo volanej funkcii.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1556
  • Karma: 37
    • Pepak.net
Re:Výnimka ako parameter funkcie
« Odpověď #4 kdy: 09-07-2021, 06:18:46 »
Jestli si myslíš, že jsi tím něco objasnil, tak neobjasnil. Co je to Self? Proč by jeho ToString mělo dávat neprázdný string? Můžeš ukázat nějaký ucelenější köd, ze kterého bude vidět celé použití?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5848
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Výnimka ako parameter funkcie
« Odpověď #5 kdy: 09-07-2021, 07:21:00 »
Kód: Delphi [Vybrat]
  1. procedure EjstException.RaisingException(P: PExceptionRecord);
  2. begin
  3.   inherited;
  4.   FErrorMessage := oVerboseError.VerboseError(FErrorCode, Self.InnerException);
  5. ShowErrorMessage;
  6. end;[code=delphi]Čo je pre mňa samozrejmé, to iní nevedia :-[
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1556
  • Karma: 37
    • Pepak.net
Re:Výnimka ako parameter funkcie
« Odpověď #6 kdy: 09-07-2021, 10:11:24 »
Poslední pokus, pokud ten nevyjde, tak to vzdávám. Sorry, ale tvoje dotazy jsou určené pro věštce, ne pro programátory.

1) Co je to EjstException?
2) Při jaké příležitosti se volá EjstException.RaisingException?
3) Co je to oVerboseError?
4) Co dělá oVerboseError.VerboseError?
5) Kde se vezme Self.InnerException?
6) Co dělá ShowErrorMessage?
7) Pokud se do tohohle nějak dostaneš v rámci obsluhy výjimek, jak vypadá vznik této výjimky a její případné další zpracování?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5848
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Výnimka ako parameter funkcie
« Odpověď #7 kdy: 09-07-2021, 10:22:58 »
  • Vlastná výnimka
  • To si riadia výnimky automaticky. Bežne pred raise. Pri RaiseOuterException po raise
  • Trieda pre texty výnimiek
  • Vráti text výnimky
  • Ja som ho tam dal. Posielam si vnútornú výnimku v spracovávanej vlastnej výnimke
  • Len zobrazí oznam pre užívateľa.
  • Exception.RaiseOuterException(EjstException.Create(EDB_Table_Post)); Ďalšie spracovanie výnimky neexistuje.
Ide mi o to, že spracovávam výnimku. Odvolám sa na ňu (v nej) pomocou Self. Nie je nil. Vráti mi vnútornú výnimku.
Ale o sebe mi neposkytne žiadne údaje. Prečo? Nič viac.
Keďže to vyzerá na zavrhnutie vlastných výnimiek, tak ma to zaujíma z akademického dôvodu.

« Poslední změna: 09-07-2021, 10:24:38 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1556
  • Karma: 37
    • Pepak.net
Re:Výnimka ako parameter funkcie
« Odpověď #8 kdy: 09-07-2021, 13:34:27 »
Stejně jsem nepochopil, co a jak děláš. Úroveň tvých detailů je zhruba na úrovni, jako kdybych ti řekl, "to je jednoduché, děláš to špatně" - máš pocit, že by ti to pomohlo? Očekával jsem nějaký minimalistický kód, který si případně můžu sám vyzkoušet a na kterém bude jasně popsáno, v kterém místě je chyba a v čem ta chyba spočívá (co jsi chtěl, aby se stalo, a co se děje ve skutečnosti). S informacemi, které dáváš, fakt nemá smysl se s tím dál zabývat, sorry.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5848
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Výnimka ako parameter funkcie
« Odpověď #9 kdy: 09-07-2021, 15:45:16 »
Ale ja som dal komplet kód. Nejedná sa o výnimku. Ale že mi výnimka nevypíše o sebe žiadne údaje. Ale vnorená výnimka áno. Dávam iný, úplne jednoduchý kód.
Kód: Delphi [Vybrat]
  1. procedure EjstException.RaisingException(P: PExceptionRecord);
  2. begin
  3.   inherited;
  4.   ShowMessage(Self.ToString);  // vráti ''. Očakávam chybovú hlášku
  5.   ShowMessage(Self.InnerExection.ToString);  // vráti chybovú hlášku
  6. end;
Tak som to mal urobiť na samom začiatku :-[

W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.