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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
DB aware komponenty - blokovanie záznamu.
« kdy: 23-05-2019, 09:56:17 »
Špekulujem nad zmenou komponentov za DB komponenty. Vadí mi tam jedna vec: užívateľ spustí Edit/Insert a ide na obed. Záznam sa uzamkne. Ako sa to rieši?
Pri nie DB komponentoch tento problém nemám. Edit/Insert spúšťam bezprostredne pred Post.
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 aware komponenty - blokovanie záznamu.
« Odpověď #1 kdy: 23-05-2019, 11:45:22 »
Excellent
Rated 1 time
>Ako sa to rieši?

Tím že se nepoužíjí DB komponenty :-)
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #2 kdy: 23-05-2019, 12:05:29 »
Tak to si mi vyriešil dilemu nad ktorou meditujem niekoľko dní ;D
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 aware komponenty - blokovanie záznamu.
« Odpověď #3 kdy: 23-05-2019, 13:26:02 »
Tím že se nepoužíjí DB komponenty :-)
Kolega v drevnich dobach to resil tak, ze udelal nad TWinControl a TDataset kompletne celou sadu widgetu, nektere s naprostu uzasnymi vlastnostmi a to zahrnovalo i vlastni implementaci  TDatasource tak, aby se to nezamykalo. Ale technicke podrobnosti po me nechtej - sice bych se mohl podivat do zdrojovek a zkusit nastudovat, jak je to udelano, ale uprime se mi do toho nechce: 1) nemam rad DB aplikace 2) uz jsem skoro duchodce

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 144
  • Karma: 8
    • Verze Delphi: XE2
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #4 kdy: 23-05-2019, 13:40:35 »
>Ako sa to rieši?

Tím že se nepoužíjí DB komponenty :-)

Nebo používat přes memory table  ;)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #5 kdy: 23-05-2019, 13:47:54 »
Tím že se nepoužíjí DB komponenty :-)
Kolega v drevnich dobach to resil tak, ze udelal nad TWinControl a TDataset kompletne celou sadu widgetu, nektere s naprostu uzasnymi vlastnostmi a to zahrnovalo i vlastni implementaci  TDatasource tak, aby se to nezamykalo. Ale technicke podrobnosti po me nechtej - sice bych se mohl podivat do zdrojovek a zkusit nastudovat, jak je to udelano, ale uprime se mi do toho nechce: 1) nemam rad DB aplikace 2) uz jsem skoro duchodce
3) Určite by som do toho neiš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 aware komponenty - blokovanie záznamu.
« Odpověď #6 kdy: 23-05-2019, 13:49:10 »
>Ako sa to rieši?

Tím že se nepoužíjí DB komponenty :-)

Nebo používat přes memory table  ;)
To by som sa zas musel učiť niečo nové :o  a prepracovať 3/4 aplikácie :-\
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 516
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #7 kdy: 23-05-2019, 16:10:52 »
Špekulujem nad zmenou komponentov za DB komponenty. Vadí mi tam jedna vec: užívateľ spustí Edit/Insert a ide na obed. Záznam sa uzamkne. Ako sa to rieši?
Pri nie DB komponentoch tento problém nemám. Edit/Insert spúšťam bezprostredne pred Post.
Je to viac-užívateľská databáza? V mojom prípade to býva len jeden užívateľ, takže keď ide na obed, je to jedno :)
Spravidla vyhodnocujem len stávajúci stav. Dáta prichádzajú hotové. Potom je to veľmi príjemný pohľad na databázu a jej problémy

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #8 kdy: 23-05-2019, 16:23:18 »
Jedna je embeded - jedno užívateľská. Pri druhej predpokladám aj sieťovú verziu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 144
  • Karma: 8
    • Verze Delphi: XE2
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #9 kdy: 23-05-2019, 16:44:20 »
Jedna je embeded - jedno užívateľská. Pri druhej predpokladám aj sieťovú verziu.

Uvážit jaká je šance že ve stejnou dobu bude více uživatelů editovat stejná data ..

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 752
  • Karma: 42
    • Verze Delphi: 10.3
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #10 kdy: 23-05-2019, 23:11:30 »
Špekulujem nad zmenou komponentov za DB komponenty. Vadí mi tam jedna vec: užívateľ spustí Edit/Insert a ide na obed. Záznam sa uzamkne. Ako sa to rieši?
Pri nie DB komponentoch tento problém nemám. Edit/Insert spúšťam bezprostredne pred Post.

S jakou databází tam pracuješ? Firebird standardně při Edit záznamy nezamyká. U Insertu by odchod na oběd neměl už vůbec vadit, protože záznam zatím ani v databázi není, dokud se neudělá Post, ne?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #11 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ů: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #12 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ů: 144
  • Karma: 8
    • Verze Delphi: XE2
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #13 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ů: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #14 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ů: 2586
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #15 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ů: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #16 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ů: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #17 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ů: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #18 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ů: 752
  • Karma: 42
    • Verze Delphi: 10.3
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #19 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ů: 4393
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #20 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ů: 752
  • Karma: 42
    • Verze Delphi: 10.3
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #21 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ů: 752
  • Karma: 42
    • Verze Delphi: 10.3
Re:DB aware komponenty - blokovanie záznamu.
« Odpověď #22 kdy: 26-05-2019, 22:35:40 »
Pro NOT NULL to název pole téměř jistě vypíše.