Autor Téma: DB aware komponenty - blokovanie záznamu.  (Přečteno 545 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4417
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #15 kdy: 24-05-2019, 08:02:59 »
Citace
Uvážit jaká je šance že ve stejnou dobu bude více uživatelů editovat stejná data ..
Snažím sa ju minimalizovať.
Citace
S jakou databází tam pracuješ?
Access len jedno užívateľsky a FB, kde predpokladám aj sieťovú verziu. Pri FB sa pracuje so spoločenstvami a s jedným SVB bude môcť robiť len jediný užívateľ. Takže šanca je prakticky nulová.
Žeby som nad nimi opäť začal uvažovať? :-\ :-\ :-\

 
Hokej nepozerám, ale zajtra vám držím palce!
« Poslední změna: 24-05-2019, 08:05:01 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4417
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #16 kdy: 24-05-2019, 22:42:25 »
Hm, po krátkom štúdiu to vyzerá tak, že predsa len použijem DB komponenty. Ale bude to fuška na dlhší čas. Dôvody:
  • Nemusím sa starať o zobrazovanie údajov. Vyhodím všetky moje funkcie pre prácu s údajmi z DB, Write.., Read.., Get..
  • Budem mať k dispozícii pôvodné aj nové údaje. To sa môže zísť
  • Vďaka nim si viem do TDBEditCtrl načítať všetky potrebné údaje. Budem sa musieť s tým pohrať a nastaviť ich v DataSet-e. Prejsť každé pole
  • Zoznam TDBEditCtrl si vytvorím automaticky. Vypadne mi kopa textu zo zdrojákov
  • Názvy komponentov ukončím číslami, očíslujem si ich, a podľa toho si ten zoznam zoradím. Tým dosiahnem správne poradie kontroly
  • Automatická kontrola ostane zachovaná
  • TMS má veľmi širokú paletu DB komponentov. Dajú sa využiť na tvorbu rôznych typov formulárov. Už ich len naštudovať
Hlavne už nebudem nad tým meditovať a v budúcnosti to už určite nebudem meniť. Je to veľká a zásadná zmena. A takých už bolo naozaj dosť. Pomohlo mi, že ste mi ukázali iný pohľad na uzamykanie záznamov. Presnejšie je, že som si to vďaka Vám premyslel a vyjasnil.
Ďakujem.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 8
    • Verze Delphi: XE2
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #17 kdy: 25-05-2019, 21:50:40 »
Hm, po krátkom štúdiu to vyzerá tak, že predsa len použijem DB komponenty. Ale bude to fuška na dlhší čas. Dôvody:
  • Názvy komponentov ukončím číslami, očíslujem si ich, a podľa toho si ten zoznam zoradím. Tým dosiahnem správne poradie kontroly

IMHO by měl stačit jednodušší přístup k datům - Dataset.FieldByName('xxx').Asxxx

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4417
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #18 kdy: 25-05-2019, 22:13:20 »
Citácia (poradie) a Tvoj príspevok (údaje) nejdú dokopy. Ja sa údajoch ešte nebavím.
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 aware komponenty - blokovanie záznamu.
« Odpověď #19 kdy: 26-05-2019, 08:03:27 »
   
  • Názvy komponentov ukončím číslami, očíslujem si ich, a podľa toho si ten zoznam zoradím. Tým dosiahnem správne poradie kontroly
Ja tedy take nerozumim, proc to potrebujes cislovat - tomu bych se zrovna obloukem vyhnul. Kontroly maji prece nekolik urovni:
- na urovni pole
- na urvni zaznamu
- na urovni operace

A na urovni pole kontrolujes, jestli nekdo napr. zadal datum v pozadovanem intervalu a na poradi prece nezalezi, ne?

Na urovni recordu te mohou zajimat tak nullable pole a jestli kontext odpovida variante, ktera nezadani hodnoty odpovida. Ale v tom pripade to vetsinou neni linearni seznam, ale nejake diskriminatory, ktere definuji variantu a uz to vyzaduje rucne definovat nejakou logiku.

A na urovni operace, tam uz se neda predpokladat skoro nic a vsechny kontroly se museji definovat rucne. A neco z toho muze byt expost, treba nejaky contraint vioalition z DB, ktery na uropvni aplikace nezajistis.


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4417
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #20 kdy: 26-05-2019, 09:42:36 »
Citace
Nevim o jake kontroly jde (takze netusim proc tak zalezi na poradi), ale co se tyce kontroly hodnot constraint sloupcu, ty by se mely odehravat uz na urovni DB aware komponent (nevim jak TMS).
TMS ich má na dobrej úrovni. No nie všetko si tam dokážem nastaviť. Tým pádom sa niektoré kontroly vykonajú aj 2x, čo mne osobne nevadí, lebo mám istotu správnosti údaju. To je u mňa takzvaná základná kontrola. Dosť zle sa rieši prípad, či môže byť hodnota nulová. S príznakom to je jednoznačné.
Ak sa údaje navzájom ovplyvňujú, tak to pomocou komponentov nemusím zvládnuť. Napríklad príliš komplikované vzťahy. Pekným príkladom sú dátumy. Ak ich budem všetky naraz kontrolovať, tak
  • sa ľahko dostanem do nekonečnej slučky
  • užívateľ bude divieť, lebo nebude schopný zadať správne hodnoty
Najprv vyvolám základnú kontrolu a potom vykonám túto dodatočnú kontrolu. Mimochodom, bolo mi tu odporúčané (pf1957), že mám nechať užívateľa zadávať si čo chce a kontrolu vykonať až po zadaní údajov. Môže si údaj odniekadiaľ kopírovať a dodatočne si ho upraviť do správnej hodnoty.

Poradie je kvôli jedinej veci. Aby pri kontrole neskákal kurzor krížom-krážom po celej obrazovke, ale tak ako sú definované TabOrder.
Citace
Pokud ne, pak se budou odehravat na urovni FireDAC.
Mám obavu, že by to už pre mňa bolo dosť neskoro. Hlavne neviem ako by som si s tým poradil.
Citace
Na urovni recordu te mohou zajimat tak nullable pole a jestli kontext odpovida variante, ktera nezadani hodnoty odpovida.
V DB mám vždy všetko nastavené na nullable. Mám prípady, kedy sa mi obmedzenie nullable mení. Údaje zadávané podľa platných, alebo starých predpisov. Takto s tým nemám problém. Keď som s tým začínal, tak som sa viackrát stretol s názorom, že v DB nemám na úrovni tabuliek definovať žiadne obmedzenia, lebo mi budú veľmi komplikovať život. O tom som sa rýchlo presvedčil, a moje riešenie mi ako osobe plne vyhovuje.
Citace
A na urovni operace, tam uz se neda predpokladat skoro nic a vsechny kontroly se museji definovat rucne. A neco z toho muze byt expost, treba nejaky contraint vioalition z DB, ktery na uropvni aplikace nezajistis.
Ja do DB posielam na 100 %  ;D správne údaje. Potom mi už ostáva riešiť iba výnimky DBMS/FireDAC.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4417
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #21 kdy: 26-05-2019, 11:38:29 »
Dám si na formulár dva panely a na každý panel komponenty. Panely vynechám TabStop := False. Komponenty budú mať na oboch paneloch TabOrder od 0. Mne sa to teda riešiť nechce.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4417
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #22 kdy: 26-05-2019, 20:44:40 »
O štruktúre GetTabOrderList som sa toho veľa nedočítal. Pochopil som, že sa jedná o strom. So stromami nepracujem. Okrem DB komponentov tam môžem mať aj iné zamerateľné komponenty. Vidím to, pre mňa, na komplikované riešenie.
Číslovanie komponentov je cesta najmenšieho odporu a pre mňa logikou/riešením jasná.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 765
  • Karma: 43
    • Verze Delphi: 10.3
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #23 kdy: 26-05-2019, 21:28:37 »
V DB mám vždy všetko nastavené na nullable. Mám prípady, kedy sa mi obmedzenie nullable mení. Údaje zadávané podľa platných, alebo starých predpisov. Takto s tým nemám problém. Keď som s tým začínal, tak som sa viackrát stretol s názorom, že v DB nemám na úrovni tabuliek definovať žiadne obmedzenia, lebo mi budú veľmi komplikovať život. O tom som sa rýchlo presvedčil, a moje riešenie mi ako osobe plne vyhovuje.

Mně právě připadají kontroly přímo v tabulce velmi užitečné. Takové ty věci, jako že DatumX musí být větší nebo rovno hodnotě v poli DatumY, že nějaká částka musí být >= 0 apod. nechávám kontrolovat v databázi, protože mám jistotu, že tam uživatel nijak nepropašuje špatné údaje (někteří uživatelé používají např. zápis do některých tabulek přes ODBC). Do některých tabulek potřebuji zapisovat z více míst aplikace (ruční zápis objednávek, objednávka přes e-shop, objednávka z mobilního terminálu...), tak je to pro mne i praktický způsob, jak mít kontroly na jednom místě.

Stejně tak NOT NULL - pokud od začátku vím, že ta hodnota musí být vyplněná (třeba doklad o likvidaci - množství likvidovaného zboží), tak tam NOT NULL nastavím. Je to užitečná prevence chyb a předcházení problémům.
Když máš "staré" a "nové" předpisy, tak asi máš v záznamu příznak (nebo datum), podle jakého předpisu to je vyplněno, a pak můžeš pro kontrolu použít CHECK CONSTRAINT a rozlišit v něm, zda hodnota musí nebo nemusí být vyplněná.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4417
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #24 kdy: 26-05-2019, 22:26:11 »
Chlapi, vy si už zo mňa robíte srandu :)
K tomu riešeniu, obmedzenia v DB, mám jednu otázku: Ako sa riešia neplatné údaje? DB vyhodí výnimku? Nájdem tam konkrétne pole?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 765
  • Karma: 43
    • Verze Delphi: 10.3
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #25 kdy: 26-05-2019, 22:33:51 »
Každý je holt zvyklý pracovat jinak :-)

Pro:
 CONSTRAINT Pobocky_KPocetPokladenRucne CHECK (PocetPokladenRucne>=0)

to vypíše něco jako:
Operation violates CHECK constraint POBOCKY_KPOCETPOKLADENRUCNE on view or table POBOCKY
At trigger 'CHECK_512'.

Konkrétní pole z toho jednoznačně určit nejde, ostatně často se v rámci kontroly porovnává několik polí.
Život uživatele se dá zpříjemnit tak, že se pro POBOCKY_KPOCETPOKLADENRUCNE někde v aplikaci definuje české/slovenské vysvětlení a to se zobrazí místo hlášky od Firebirdu.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 765
  • Karma: 43
    • Verze Delphi: 10.3
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #26 kdy: 26-05-2019, 22:35:40 »
Pro NOT NULL to název pole téměř jistě vypíše.