Autor Téma: Kódy chýb - zistiť masku a skupinu  (Přečteno 599 krát)

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 713
  • Karma: 42
    • Verze Delphi: 10.3
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #30 kdy: 12-07-2019, 22:05:05 »
A proč je vlastně nutné to spojovat do jedné hodnoty a pak zase rozdělovat? Nemůžeš to prostě pořád nechat jako 4 samostatné hodnoty?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #31 kdy: 13-07-2019, 07:46:04 »
Môžem ;D
Jedno veľké číslo zamaskované za meno vyzerá lepšie ako 4-6 malých čísel. Vychádzal som z toho čo mi nadhodil pf1957. Pritom som nerozmýšľal nad inými možnosťami, spôsobmi či variantmi.
V takom prípade ten ErrorCode asi urobím ako triedu. To je pre mňa najjednoduchšie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2569
  • Karma: 132
    • Verze Delphi: D2007, XE3, DX10
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #32 kdy: 13-07-2019, 09:02:28 »
  • Category - DB, JSON, VST...
  • Group - pre DB: Table, Query...
  • Detail - pre Table: Insert, Edit, Post...
  • ErrorCode = Category or Group or Detail
Tak s tim se musis vejit do toho variantniho recordu a budes mit k dispozici oboje: jak jednotlive slozky, tak celkovy kod.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #33 kdy: 13-07-2019, 19:24:34 »
Stále nad tým špekulujem. Nateraz mi vychádza:
  • hexadecimálny zápis. Spôsob spracovania od Morrisona
  • decimálny zápis. Len vynechám znak $ v tu uvedených kódoch. Nevidím dôvod ho nepoužiť. Ten viem spracovať
  • variants record - tu mám jeden veľký problém. Musím vytvoriť inštanciu rekordu. Kedy a kde? V mieste vyvolania výnimky to je nezmysel. Alebo budem mať toľko inštancií koľko bude ErrorCode? To bude o dosť viac kódu voči číslám
Z môjho pohľadu nevidím nijakú výhodu hexadecimálneho zápisu voči decimálnemu. Mne úplne postačuje 10 hodnôt na jednej pozícii voči 16 hexa. Tie by som aj tak zo strachu nepoužil :)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 713
  • Karma: 42
    • Verze Delphi: 10.3
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #34 kdy: 13-07-2019, 20:20:07 »
Nebo uživateli prostě zobraz kód chyby ve tvaru 1:15:3:10. Lidem se to bude líp diktovat, Ty nebudeš muset nic skládat a rozkládat, když Ti zavolají a budou chybu diktovat, tak hned podle čísel budeš vědět, v jaké oblasti ta chyba je, všichni spokojeni :-)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #35 kdy: 14-07-2019, 10:35:17 »
Máš pravdu. Načo sa ešte babrať s nejakým Message a nedajbože logmi :o ::)
Aj tak by som rád dostal krátku jednoduchú odpoveď na "Kedy a kde?". Ja viem, oni spolu súvisia.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 713
  • Karma: 42
    • Verze Delphi: 10.3
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #36 kdy: 14-07-2019, 10:38:45 »
Teď nevím, jestli jsi mne dobře pochopil :-)
Uživateli je samozřejmě dobré zobrazit nějaký kloudný text, ze kterého pochopí, v čem je problém. Ale jak jsi pořád operoval s tím, že chceš poskládat 4 číselné hodnoty do jednoho chybového kódu, tak by možná bylo jednodušší to prostě nechat jako 4 samostatné hodnoty a zobrazit třeba oddělené tečkou, dvojtečkou apod. Do logu si to můžeš zapsat, jak chceš - pokud bude log v databázi, tak klidně na ty čtyři hodnoty mít čtyři pole, alespoň podle nich budeš moci snadno filtrovat, řadit...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #37 kdy: 14-07-2019, 17:13:12 »
Citace
Teď nevím, jestli jsi mne dobře pochopil
Myslím si, že áno. Z mojej strany bol úvod reakcie irónia. Veď je nedeľa.
Tu otázku Kedy a kde som mal na mysli len vo vzťahu k variants record.
Ako to myslím. Budem mať definovaných 1000 ErrorCode. Pri vyvolaní výnimky použijem napr.
Kód: Delphi [Vybrat]
  1. MyErrror.Create(ErrorCode999, ...)
To sa nedá použiť na variants record. Podľa mňa by mal existovať len jediný variants record. Možno to je chyba v mojej predstave. Otázku môžem zmeniť aj na:
Mám si definovať 1000 x MyVariantsRecord?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2569
  • Karma: 132
    • Verze Delphi: D2007, XE3, DX10
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #38 kdy: 14-07-2019, 18:21:13 »
Budem mať definovaných 1000 ErrorCode. Pri vyvolaní výnimky použijem napr.
Kód: Delphi [Vybrat]
  1. MyErrror.Create(ErrorCode999, ...)
Ano, to je jedna z cest, kdy to ridis Error codem. Ale zrovna tak muzes psat
Kód: Delphi [Vybrat]
  1. MyErrror.Create(Category.X, Group.Y, Detail.Z, ErrorCode, E)

A pokud se ti nebude prilis lisit struktura resp. to bude v nejjednoduzsim pripade vzdy Category, Group, Detail a ErrorCode, tak ti na vsechno staci jeden variantni record:
 - 1. varianta pro jednotlive hodnoty Category, Group, Detail a ErrorCode
 - 2. varianta pro vysledek, ve kterem budou hodnoty Category, Group, Detail a ErrorCode nasackovany na hranicich bytu do uint32/uint64

Z hlediska prace s chybou je uplne jedno, jestli tu chybu vyrenderujes jako napr. decimalni hodnoty oddelene dvojteckou Category:Group:Detail:ErrorCode nebo uint32/64 renderovanty do desitkove nebo sestnactkove soustavy... Akorat ze desitkouvou soustavu pouzivaji jen strikaci ;)

Kdyz bude struktura tech Error code nesouroda, tak teprve pak se vyplati nadefinovat si tech 1000 error kodu (=konstant) a predavat to jako jediny parametr do konstruktoru a vsude dal to predavat jako parametr s tim, ze kdyz to nekde budes potrebovat, tak si to budes muzes zpetne rozlozit na jednotlive slozky

Ale to uz jsem ti vsechno psal...

Do DB bych nelogoval, protoze k tomu musis mit funkcni nezanedbatelnou infrastrukturu aplikace, muzes mit potrebu logovat nekde uprostred rozpadajici se / zotavovane DB transkace etc... Logovaci subsystem by mel vyzadovat co nejmene zavislosti, idealne jen I/O subsystem OS.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #39 kdy: 14-07-2019, 18:40:57 »
Ja si teraz šrotujem hlavu len myšlienkou, Kde a kedy vytvoriť variants record. Či bude jeden alebo 1000.
Ak by som ho mal vytvárať pri vyvolaní výnimky, tak je jednoduchšie poslať jednotlivé kódy - MyErrror.Create(Category.X, Group.Y, Detail.Z, ErrorCode, E).
Lenže ja si nijako neviem predstaviť, žeby som vytvoril jeden jediný variants record v TMyErrror! Momentálne to je môj hlavný problém. O tom je aj otázka Kde a kedy.
Vytvoriť ich 1000 považujem prinajmenšom za somarinu. Jedine, žeby som ich mal v samostatnej jednotke v nejakom zozname. Aby sa z behu programu vytvorili len raz. A v prípade potreby ich odtiaľ ťahať.
To by funkčne zodpovedalo definíciám ErrorCode.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #40 kdy: 14-07-2019, 18:42:35 »
Alebo ErrorCode definovať ako variants record?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2569
  • Karma: 132
    • Verze Delphi: D2007, XE3, DX10
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #41 kdy: 14-07-2019, 18:51:55 »
Excellent
Rated 1 time
Alebo ErrorCode definovať ako variants record?
ja uz nevim, jak ti to napsat. Nakresli si na papir obdelnik na vysku jako pamet, ktera predstavuje n-bytu (treba 8 ) a je uvnitr variantniho recordu. Zleva si napis pod sebe ty tvoje Category, Group, Detail a buhvi co jeste tak, aby nezabraly vice nez tech n-bytu. A zprava jedinou hodnotu, ktera obsahne ten obdelnik na vysku - to bude tvuj vysledny kod. Vlevo je ta varianta 1, vpravo varianta 2 variantniho recordu tj. ruznych pohledu na stejny zmolek pameti. A kdyz budes predpokladat napr. uint64 (qword), tak je v MyError prece uplne jedno, jestli ma member variable typu qword nebo spravne napsanou verzi variantniho recordu, ktera predstavuje v pameti take qword a umozni ti jedine: pracovat napr. s temi 64 bity pokazde jinak podle poctu variant.

Ale uz fakt mlcim,

« Poslední změna: 14-07-2019, 19:00:50 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #42 kdy: 14-07-2019, 19:36:21 »
Tak trocha začínať šípiť o čom píšeš. Len som si to ešte nenakreslil :)
Už tu dám pokoj. Niečo z toho dostanem.
Všetkým ďakujem.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Kódy chýb - zistiť masku a skupinu
« Odpověď #43 kdy: 14-07-2019, 20:15:18 »
Zhrniem to ako to chápem ja:
  • Category, Group, Detail, ErrorCode = Category or Group or Detail
  • ErrorCode = VariantsRecord(Field: Category, Group, Detail)
Ja to chápem tak, že MyError sa vytvorí až v okamihu vyvolania výnimky. To znamená, že sa v rámci Create definuje všetkých 1000 ErrorCode.
Alebo to je ináč?
Keďže ErrorCode sú v časti interface, tak sú definované v okamihu načítania jednotky,  nasúkajú sa do pamäte, a zaniknú až pri ukončení aplikácie. Opakovanie sa volá len Create.
Keď som to napísal, tak som za podčiarknuté. Už sa mi rysuje v hlave aj tá práca/princíp s variants record.
Ach jaj, máte so mnou ťažké. Veď ja nerozumiem sám sebe ???
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.