Forum Delphi.cz

Delphi => Obecné => Téma založeno: Stanislav Hruška 05-07-2021, 16:17:55

Název: Výnimka ako parameter funkcie
Přispěvatel: Stanislav Hruška 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;
Název: Re:Výnimka ako parameter funkcie
Přispěvatel: Stanislav Hruška 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));
Název: Re:Výnimka ako parameter funkcie
Přispěvatel: pepak 08-07-2021, 06:05:11
"Toto funguje" a "Toto nefunguje" je naprosto nedostatečný popis.
Název: Re:Výnimka ako parameter funkcie
Přispěvatel: Stanislav Hruška 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.
Název: Re:Výnimka ako parameter funkcie
Přispěvatel: pepak 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í?
Název: Re:Výnimka ako parameter funkcie
Přispěvatel: Stanislav Hruška 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 :-[
Název: Re:Výnimka ako parameter funkcie
Přispěvatel: pepak 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í?
Název: Re:Výnimka ako parameter funkcie
Přispěvatel: Stanislav Hruška 09-07-2021, 10:22:58
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.

Název: Re:Výnimka ako parameter funkcie
Přispěvatel: pepak 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.
Název: Re:Výnimka ako parameter funkcie
Přispěvatel: Stanislav Hruška 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 :-[