Autor Téma: DB - trieda pre ošetrenie výnimiek  (Přečteno 1970 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #30 kdy: 23-05-2019, 08:48:58 »
Snáď som pochopil, ako by tie výnimky mali fungovať. Horšie to je s implementáciou. Momentálne rozmýšľa nad jedným problémom:
Kód: Delphi [Vybrat]
  1.   EDBAbstractException = class(EFDDBEngineException)
  2.    EDBException = class(EDBAbstractException)
Používam FireDAC a ten má vlastné ošetrenie výnimiek EFDDBEngineException. Bol by hriech to ignorovať. Ale ako to mám dostať do vlastného riešenia.
Kód: Delphi [Vybrat]
  1. EDBException = class(EFDDBEngineException)
Rozbije celý návrh. Pri EFDDBEngineException nemôžem použiť vnorenie výnimky. Neviem ktorú by som tam mal dať. Vnoriť EFDDBEngineException do vlastnej ešte pred jej vyvolaním je nezmysel.

Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2588
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #31 kdy: 23-05-2019, 08:50:36 »
Vim co znamena verbose. Jedna vec je ze bych u metody cekal sloveso, tedy GetVerbose...,
Prefixem Get se zpravidla znaci gettery a to tady neni. Takze Verbose je tu v roli sloveso stejne jako je ReadXxxx, WriteXxx apod.

Citace
druha (podstatnejsi) ze zobrazujes v dialogu neco cemuz rikas ErrorCode. Od metody (Get)VerboseErrorCode bych totiz cekal vraceni nejakeho detailniho kodu chyby (ne zpravy pro BFU).
OK. S tim souhlasim, ale je to nejaka citace z diskuze, schvalne jsem se dival a u nas se to jmenu jen VerboseError

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2588
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #32 kdy: 23-05-2019, 09:05:49 »
Pri EFDDBEngineException nemôžem použiť vnorenie výnimky. Neviem ktorú by som tam mal dať. Vnoriť EFDDBEngineException do vlastnej ešte pred jej vyvolaním je nezmysel.
Tomu vubec nerozumim, proc bys nemohl pouzit vnorene vyjimky? Je pravda, ze normalni jazyky maji overload konstruktor, ktery jako parametr ocekava inner exception, takze se pise pri unifikaci error subsystemu neco takoveho a dela se to opakovane pri kazdem odchyceni vyjimky, aby se neztracely informace o tom, k cemu doslo.
Kód: Delphi [Vybrat]
  1. on e:ExceptionXyz do
  2.   begin
  3.    ...
  4.     raise MyException.Create(......, e);
  5.   end;
  6.  


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #33 kdy: 23-05-2019, 09:21:32 »
Môj myšlienkový pochod:

  • Stlačím tlačidlo Post - tu je vlastná výnimka. Na EFDDBEngineException je podľa mňa veľmi skoro
  • Program vykoná TAble.Post - tu je EFDDBEngineException. Vnorenie nemôžem použiť, lebo neviem odkiaľ som to volal
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #34 kdy: 23-05-2019, 09:51:27 »
Už asi začínam starnúť ;)  Až keď to vidím napísane, tak mi došlo o čo ide.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.