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

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2329
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #15 kdy: 06-11-2017, 09:34:01 »
Totálne nechápem čo si predkladal dve hodiny.  Ktorý výraz/význam.
Nic, zapomen na to, to nijak nesouvisi ani s Delphi ani s tim, cos nekdy napsal... Mel jsem to oznacit jako OT

A ve volnych chvilich prekladam knizku "The Giza Power Plant: technologies of Ancient Egypt" ;-) a 2 hodiny jsem se dopracovaval ke spravnemu ceskemu terminu.

Vím přesně co myslíš, tak jak jsi to nakonec nazval? Něco jako Kruhový indikátor?
Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2586
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #16 kdy: 06-11-2017, 09:34:51 »
Vím přesně co myslíš, tak jak jsi to nakonec nazval? Něco jako Kruhový indikátor?
Spravne se to jmenuje uchylkomer :-)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #17 kdy: 06-11-2017, 09:44:54 »
Slovenčina je viac popisná, takže u nás to je "merač odchýlok". Slangovo odchýlkomer. Úchylkomer by u nás meral aký som úchylák ;D
Ale keď to zoberieme doslovne technicky, tak odchýlka sa nedá merať. Čosi odmeriaš, porovnáš to s požadovanou/normovanou hodnotu a vyhlásiš akú to má odchýlku. Ale bežne sa používa výraz "odmerať odchýlku".
Takže používame jedine meradlá (teraz mám na mysli len dĺžkové): meter, centimeter, mikrometer, posuvné meradlo (šublera) ... A tie majú buď lineárnu, kruhovú (budík, hodiny, ciferník...) alebo digitálnu stupnicu.
Joj, ale som frajer. So strojarinou som naposledy robil, keď som skončil školu ???
« Poslední změna: 06-11-2017, 09:57:50 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #18 kdy: 06-11-2017, 10:02:14 »
Trochu tam kecám. Spomenul som si, že niečo ako odchýlkomer existuje. Ten zvykne mať kruhovú stupnicu bez čísel. Má, zvyčajne zelené pole a po krajoch červené. Keď je ručička v červenom poli je zle.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2586
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
OT: Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #19 kdy: 06-11-2017, 10:16:28 »
Trochu tam kecám. Spomenul som si, že niečo ako odchýlkomer existuje. Ten zvykne mať kruhovú stupnicu bez čísel. Má, zvyčajne zelené pole a po krajoch červené. Keď je ručička v červenom poli je zle.
No kdyz uz jsem to sem vnesl... Ono i cesky se tomu nekdy rika odchylkomer, ale temer vzdy pres lomitko nebo do zavorky uvedou uchylkomer. Co jsem se dival, tak treba ve VS scriptech a jine odborne literature pouzivaji
- uchylka pro rozmerovou variabilitu
- odchylka ve spojeni s (ne)presnosti mereni resp. meridla viz smerodatna odchylka etc.

No nic, to byl jen takovy jazykovy koutek a nebo otazka do nejake souteze "co by si vzal sebou clovek, ktery jede zkoumat stavbu pyramidy a pribalil si hodinky?"

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #20 kdy: 22-05-2019, 09:24:48 »

Tak som sa pustil do tých výnimiek
Kód: Delphi [Vybrat]
  1. except
  2.   on E:XMYDBException
  3.     begin
  4.        myExc = XMYDBException(E);
  5.        case myExc.ErrorCode
  6.          MYDBERR_SP_LANDLORD_EXEC_FAILED:
  7.            begin
  8.               errMsg := myExc.VerboseErrorCode(Envi.GUICulture);
  9.               ShowErrorMessage(errMsg);
  10.            end;
  11.          else raise;
  12.        end;
  13.     end;
  14.   on E:EFDDBEngineException
  15.     begin
  16.       ...
  17.     end;
  18.   on E:Exception
  19.     begin
  20.        ...
  21.  
  22.     end;
Tomuto nerozumiem
Kód: Delphi [Vybrat]
  1. VerboseErrorCode(Envi.GUICulture)
  • čo vlastne má robiť funkcia VerboseErrorCode? Predpokladám, že podľa myExc.ErrorCode vráti príslušný text
  • Envi.GUICulture - odkiaľ sa tu nabralo Envi? Čo vlastne znamená?
  • GUICulture (typ string) - čo má obsahovať?
Písal si to narýchlo, tak tam sú preklepy. Vyjasnil som si ich. Aspoň som musel hlbšie nad tým rozmýšľať. No s týmto si neviem rady.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2329
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #21 kdy: 22-05-2019, 11:15:36 »

Tak som sa pustil do tých výnimiek
Kód: Delphi [Vybrat]
  1. except
  2.   on E:XMYDBException
  3.     begin
  4.        myExc = XMYDBException(E);
  5.        case myExc.ErrorCode
  6.          MYDBERR_SP_LANDLORD_EXEC_FAILED:
  7.            begin
  8.               errMsg := myExc.VerboseErrorCode(Envi.GUICulture);
  9.               ShowErrorMessage(errMsg);
  10.            end;
  11.          else raise;
  12.        end;
  13.     end;
  14.   on E:EFDDBEngineException
  15.     begin
  16.       ...
  17.     end;
  18.   on E:Exception
  19.     begin
  20.        ...
  21.  
  22.     end;
Tomuto nerozumiem
Kód: Delphi [Vybrat]
  1. VerboseErrorCode(Envi.GUICulture)
  • čo vlastne má robiť funkcia VerboseErrorCode? Predpokladám, že podľa myExc.ErrorCode vráti príslušný text
  • Envi.GUICulture - odkiaľ sa tu nabralo Envi? Čo vlastne znamená?
  • GUICulture (typ string) - čo má obsahovať?
Písal si to narýchlo, tak tam sú preklepy. Vyjasnil som si ich. Aspoň som musel hlbšie nad tým rozmýšľať. No s týmto si neviem rady.


Tak klikni na to Envi a uvidis. Budto to bude nejaky globalni objekt nebo primo Envi.pas
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #22 kdy: 22-05-2019, 11:24:33 »
Overoval som si to než som to napísal. Nikde som nič také nenašiel.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #23 kdy: 22-05-2019, 12:07:34 »
Vďaka.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2586
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #24 kdy: 22-05-2019, 19:56:45 »
   
  • čo vlastne má robiť funkcia VerboseErrorCode? Predpokladám, že podľa myExc.ErrorCode vráti príslušný text
Ne, to si to jednodusujes. To ma delat presne to, co rika jeji nazev: vratit podrobny popis chyby cili nejen text, ale ta exception treba vedle ErrorCode obsahuje dalsi subcody ev. nejake dalsi informace, ktere mohou byt obecne u kazde vyjimky jine a jen ta vyjimka vi, z ceho ten popis chyby ma slozit, proto je metoda exception
Citace
   
  • Envi.GUICulture - odkiaľ sa tu nabralo Envi? Čo vlastne znamená?
  • GUICulture (typ string) - čo má obsahovať?
Standardni identifikator jazyka http://docwiki.embarcadero.com/RADStudio/Rio/en/Language_Culture_Names,_Codes,_and_ISO_Values, ktery si aplikace pamatuje v necem, co jsem pojmenoval envi. Jak si to udelas a pojmenujes je na tobe.

Jinak k tem resource, zalezi, [cim to chces lokalizovat. My treba pouzivame GNU GetText jeste z doby, kdy Delphi lokalizaci textu nemel a my ji potrebovali a pouzivame ho i mimo Delphi.  A zatim jsme nemeli duvod prechazet na neco jineho.  Ale co to bude je uplne jedno, hlavne kdyz to bude spolehlive fungovat a bude s tim co nejmin srani.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2586
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #25 kdy: 23-05-2019, 08:07:24 »
Nazvu ani popisu te metody VerboseErrorCode ani po vysvetleni nerozumim ::) ;D
:-O Nazev je IMHO jasny viz treba https://www.quora.com/What-is-the-meaning-of-the-word-verbose-in-computer-science-as-well-as-in-native-English

Smyslem je vyhnout se idiotskemu stylu, kdy se exception strci nejaky text do  property Message a pro dalsi strojove zpracovani se informace zahodi. Tady nese exception informace o chybe a s temi se programove pracuje, protoze ne vsechny vyjimky, zejmena v softech, kde o neco jde, konci zobrazenim chyby BFU, nekdy se musi zotavovat z chyby, hledat reseni pro alternaticni postup atd.

A pro potreby zobrazeni/logovani se ten text sestavuje az v okamziku potreby prave na jednom miste, misto aby se pri reusnuti exception na 150 mistech znovu text nesestavoval a prirazoval do property Message. Parametr culture to ma proto, aby se stejna chyba dala zobrazovat v ruznych jazycich napr BFU+podpore v jazyku jejich volby a do systemoveho logu anglicky, protoze jen deBilll muze prelozit chybova hlaseni OS do cestiny, u kterych nikdo nevi, co znamenaji a pracne se hledat jejich anglicky original, aby se ta chyba dala hledat napr. v platform SDK. Taky jsme meli aplikaci, kdy se stejna chyba reportovala BFU na mobil, jinak do provozniho logu v DB pro podporu a jinak do systemoveho logu pro nas. K tomu mela exception dalsi metody.




Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #26 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ů: 2586
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #27 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ů: 2586
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #28 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ů: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB - trieda pre ošetrenie výnimiek
« Odpověď #29 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.