Autor Téma: Moje MCVE - pripomienky a návrhy  (Přečteno 879 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Moje MCVE - pripomienky a návrhy
« kdy: 19-05-2019, 09:11:35 »
Viď https://forum.delphi.cz/index.php/topic,16665.0.html príspevok #20
Citace
No (co se tyce toho puvodniho MCVE kodu z jineho dotazu), zacal bych tim jak si z tech TMS komponent vyrobit (tak trochu) "DB aware" komponenty nez mastit neco tak neprehledneho a komplikovaneho (delajiciho ve vysledku vice nez ma).
Vytvoriť "DB awareP bol jediný dôvod pre napísanie tohto riešenia. To už mi bolo vytknuté. Som si toho stavu vedomý. Ja som to vtedy ináč nevedel a na tom sa zatiaľ nič nezmenilo :'(  Dokonca som rád/hrdý, že sa mi vôbec niečo podarilo dať dokopy.
Aj preto som tam napísal, že beriem akékoľvek pripomienky.
PS:
To Delfin - ja som dúfal, veril a túžobne očakával, že urobíš kostru MCV (Model - riadenie - pohľad) z ktorej budem vychádzať. Aj si začal, ale potom som už nedostal žiadnu informáciu. Pozor! Nič nevyčítam. Veď si nič nesľúbil, čo bolo aj z oboch strán zdôraznené. Pracoval si aj na tom, aby si pri VST obišiel record.
Na internete som našiel len teóriu, ale podľa nej to nespravím. Keby bol nejaký príklad, tak snáď.
« Poslední změna: 19-05-2019, 09:24:07 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #1 kdy: 19-05-2019, 09:28:00 »
Ešte dodatok.
Mám dva projekty. Uvedené MCV (PoBeS) a správu bytov. Pri PoBeS by som to asi nechal tak ako to je. Nie je to veľký projekt. Tá správa bytov je už iná káva a tam by som to teda prerobil.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #2 kdy: 19-05-2019, 20:05:36 »
S DB aware komponentami som veľmi rýchlo narazil na problémy, ktoré by som riešil ťažko. Ak vôbec. Túto moju skúsenosť potvrdilo niekoľko ľudí. Takže ich nechcem. Mojim riešením som ich obišiel a naplno využívam vlastnosti klasických komponentov (TMS), ktorých je podstatne viac a fungujú bez chýb.
Citace
Vydal bych se cestou implementace datalinku.
Konečne niečo konkrétne :)  Idem sa pozrieť o čo vlastne ide.
.
Moje InsertRecord a EditRecord vôbec nepracujú s DB. Len nastavia príznak. V Post, po vykonaní kontroly údajov, na základe toho príznaku volám Table.Insert alebo Table.Edit. Hneď nasleduje Table.Post.
.
Akurát sa mi nepáči jedna vec. Pri tvorbe formulára si otvorím Table -> ReadOnly. A mám ju otvorenú až do zrušenia formulára. Kvôli pohybu v nej na základe vybraného záznamu vo VST. Keby som toto vedel odstrániť, tak by som bol napojený na tabuľku len v čase tvorby formulára (naplnenie VST, pokiaľ nepoužijem SQL query - a to je väčšina prípadov). To naplnenie VST môžem bez nejakých problémov urobiť natvrdo pomocou SQL query.
.
Raz si mi písal, že otvorená tabuľka nie je problém. Mne sa dostal pod ruky materiál, kde sa riešila optimalizácia výkonu aplikácie. Pre FB bolo jedno z odporúčaní uzatvoriť Table. Z toho sa vymotať neviem. Nezdá sa mi, žeby som mal pri každom pohybe v tabuľke volať Table.Open - Table.Locate() - Table.Close. Vychádzajme z predpokladu, že budem s programom úspešný ;D :o ::)  a v tabuľkách budú 10-tisíce záznamov.
.
OT: prečo mi to automatické formátovanie vždy hodí dva prázdne riadky namiesto jedného. Hurá, vyriešil som to bodkami 8)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #3 kdy: 19-05-2019, 20:26:00 »
Tak narýchlo som čosi našiel na internete. Až jeden príklad pre mňa. Ale tam si zo štandardného komponentu urobil DB. Touto cestou nechcem ísť. To by som po každej aktualizácii TMS musel všetko znova kompilovať. A ktovie ako by som to zvládol. Môj obľúbený TAdvEdit podporuje niekoľko vstupov. Preto som si ho obľúbil:
text, dátum + čas, celé číslo, mena, float, hexa... Ako by som toto ošetril. Tomu neverím, že by som to zvládol.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #4 kdy: 19-05-2019, 20:31:39 »
Ja nikde, okrem FastReport, nepoužívam DataSource. To je zas nejaká medzivrstva čo si niečo ukrojí zo systémových prostriedkov.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #5 kdy: 20-05-2019, 08:19:03 »
Citace
Vydal bych se cestou implementace datalinku.
Môžeš mi vysvetliť ako to myslíš? Všetko čo som o datalink našiel, bola vždy premena komponentu na DB komponentu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #6 kdy: 20-05-2019, 12:31:32 »
Citace
Princip ktery jsem mel na mysli je, ze bys (z te sve tridy TCustomDB) ovladal dataset tedy vkladal zaznamy, editoval, mazal, skroloval atd. a pomoci datalinku naslouchal reakcim na tyto akce a podle typu zmen menil stav nebo hodnoty vizualnich komponent.
To som predpokladal, ale netuším ako by som to mal zrealizovať.
.
Pozrel som si všetky DB TMS. Vychádzajú zo základných, ktoré dopĺňajú o datalink. Tým pádom predpokladám, že by s nimi nemal byť žiaden problém ako u štandardných DB komponentov. Plus sú tam aj iné. Niektoré vyzerajú naozaj veľmi zaujímavo. Len mne sú skoro všetky nanič.

Teraz k môjmu riešeniu z pohľadu DB TMS. Mám
Kód: Delphi [Vybrat]
  1.  
  2.   TDBEditControl = class(TObject)
  3. *    FAllowZero: Boolean;  // Nemajú to. Musel by som to riešiť
  4. *    FDesired: Boolean;  // Pre mňa dôležité. Musel by som to riešiť. Existuje niečo čo by mi to nahradilo?
  5. *    FEditWinCtrl: TWinControl;  // V princípe bezpredmetné. Pre kontrolu údajov požadované
  6.     FFieldType: TFieldType;  // To si viem zistiť
  7.     FLocalName: string;  // Pokiaľ si dobre pamätám, tak sa to dá nastaviť v DataSet-e.
  8. *    FMinLength: Word;  // To by som musel riešiť
  9.     FNameField: string;  // To sa zadáva v DB komponente
  10.     FOnlyPositive: Boolean;  // Majú to implementované
  11.     FTypeCtrl: TTypeCtrl;  // Teraz sa už obídem bez toho
  12.  
Ak by som použil DB komponenty, tak by som musel riešiť 3-4 * položky a poradie kontroly jednotlivých prvkov pri základnej automatickej kontrole údajov.
Robiť potomkov z ich DB komponentov sa mi naozaj nechce.
.
Je možné tú kontrolu aj s dodržaním poradia (TabOrder) zrealizovať ináč?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #7 kdy: 20-05-2019, 12:32:26 »
Podotýkam, že s windows správami nemám žiadne skúsenosti.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #8 kdy: 20-05-2019, 16:29:38 »
Základ by mal byť niečo také?
Kód: Delphi [Vybrat]
  1. procedure TfrmMainForm.DataChange(Sender: TObject);
  2.  
  3. begin
  4.   if (DataLink.Field <> nil) then
  5.     TAdvEdit(DataLink.Control).Text := DataLink.Field.AsWideString;
  6. end;
  7. .
  8. procedure TfrmMainForm.FormCreate(Sender: TObject);
  9. begin
  10.   DataLink := TFieldDataLink.Create;
  11.   DataLink.Control := advedt1;
  12.   DataLink.FieldName := 'FullName';
  13.   DataLink.DataSource := ds1;
  14.   DataLink.OnDataChange := DataChange;
  15. end;
Hlavne ma zaujíma, či je správne navrhnutá a použitá funkcia DataChange.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #9 kdy: 20-05-2019, 16:57:02 »
Mne ide o nakopnutie ako na to. V mojej literatúre som sa dočítal, že DataLink je v podstate abstraktná trieda a priamo sa používa len výnimočne.
DataLink vytvorím a čo ďalej :(  No, idem ho študovať.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #10 kdy: 20-05-2019, 17:00:46 »
Asi sa mám odvíjať od toho - príloha. Ale tam nie je žiaden popis. Pozri si Hruška zdroják!
Edit:

Hm, tam je
Kód: Delphi [Vybrat]
  1.   protected
  2.     property DataLinks: TList<TDataLink> read FDataLinks;
  3.  
Tým pádom sa k tomu neviem dostať.
« Poslední změna: 20-05-2019, 17:07:49 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #11 kdy: 20-05-2019, 17:33:25 »
Citace
Je, ale duvod proc nepouzivas DB aware komponenty je protoze si chces prizpusobit funkcionalitu, nebo k tomu mas jiny duvod?
Keď som bol nútený sa ich vzdať, tak som TMS nemal. Problém bol s určitou funkčnosťou. Neviem či tam boli aj chyby. Mám pocit, že áno. Než mať problémy, tak som ich obišiel. A nie som, z tohto dôvodu, sám.
Teraz silne rozmýšľam, žeby som tie DB TMS mohol nasadiť. Len neviem ako riešiť automatickú kontrolu a vlastnosť Desired. Možno ostanem pri TDBEditControl, ktorý bude mať menej vlastností. A nebudem sa starať o zobrazené hodnoty - to by som komplet vyhodil.
DBGrid určite nepoužijem. Môj zlatý VST.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 533
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #12 kdy: 20-05-2019, 19:11:11 »
Zdá sa, že ti ide aj o nejaký data aware grid.
V TMS je TDBAdvGrid, odvodený z TAdvStringGrid.
Ten je kompatibilný s TMS štýlmi. Od Office 2003 Blue až po Office 2016 Black, plus Metro Light a Metro Dark.
Upravené demo zobrazuje cca 25 "TMS" štýlov. Pozri png a zip v prílohe.
Zatiaľ sa mi zdá, že celá aplikácia by komplet mohla byť na báze štýlov TMS.
Pravda aj ja používam VST. Tiež sa ho nechcem vzdať. Zatiaľ neviem s istotou, ako to vyriešim.
Intenzívne študujem TMS, aby som sa rozhodol, akou cestou sa vybrať. Mnohé veci fungujú ozaj pekne. Mám zatiaľ veľký rešpekt.
Prikladám vzhľad 6 z cca 25 štýlov, ktoré ponúka TMS.
Je to vylepšené demo z "Demos\AdvToolBar\Office2010Metro".
  • Sú dorobené všetky štýly, ktoré aktuálne TMS podporuje. Ich zoznam je jasný z obrázku
  • TStringGrid som nahradil TAdvStringGrid-om, aby prevzal štýly
Je pravdepodobné, že by tam rovnako dobre fungoval aj TAdvDBGrid, namiesto TAdvStringGrid-u
Viaceré screeny, z dema sú uložené ako png. Pozerám, že príloha png sa mi moc pekne nezobrazuje. V zip archíve sú aj ďalšie. IrfanView png-čka zobrazuje podstatne krajšie, ako vidím tu cez web.
« Poslední změna: 20-05-2019, 19:21:39 od miroB »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #13 kdy: 20-05-2019, 19:42:58 »
Citace
Zdá sa, že ti ide aj o nejaký data aware grid.
To si vôbec netrafil. Ja tu riešim celkový koncept môjho riešenia. Vyzerá to tak, že:
  • ostanem pri tom čo mám
  • použijem DB TMS komponenty. To sa mi dvakrát nechce. Myslím si, že mi to prakticky nič neprinesie. Akurát vyhodím nejaký kód. Ale v tom prípade budem musieť vyriešiť základnú automatickú kontrolu údajov. Tá mi stačí v 90 - 95%. Ďalšiu kontrolu robím len v prípade nejakých väzieb medzi údajmi. Kvôli tomu asi budem musieť ponechať aj pôvodné riešenie s TDBEditCtrl. Pokiaľ mi niečo alebo niekto neosvieti rozum
V žiadnom prípade nechcem rozširovať vlastnosti TMS komponentov. Kto by sa o to potom staral. Jedine, žeby sa to dalo urobiť nejako hromadne na pozadí.
Ja mám vyriešený aj "style" pre VST. Užívateľ si môže vybrať buď bielu farbu pozadia, alebo podľa panela = štýlu. Tieňované, tmavé a svetlé. Tak isto si môže vybrať farbu čiar (mriežky) a iné. Dával som tu snímky s tým, že v prípade záujmu som ochotný to poskytnúť. Nikto sa neprihlásil.
Ja pri tom VST dosť čarujem s farbami + preťahujem medzi nimi uzly. Dosť som sa s tým natrápil. Keby som použil iný komponent, tak neviem či by som to zvládol.
Dosť dlho mi trvalo, kým sa s VST naučil ako-tak pracovať. A teraz by som to zahodil? Vďaka nemu mám jednotný štýl cez celú aplikáciu. Či sa jedná o tabuľky alebo stromy.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4574
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #14 kdy: 20-05-2019, 19:45:58 »
Pre istotu Ťa upozorňujem, keď si to tu ešte nečítal, že nie všetky štýly v TMS majú rovnaké názvy, poradie a rovnaký počet!
Edit:
Neviem či si na to natrafil. Majú zvlášť štýl Metro, kde si môžeš zvoliť ľubovoľnú farbu. + tmavý či svetlý, ako to máš v ukážke.
« Poslední změna: 20-05-2019, 19:50:09 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.