Autor Téma: Identifikátor pre volanie procedúry a pod. Aký typ to má byť?  (Přečteno 2822 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6157
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Identifikátor pre volanie procedúry a pod. Aký typ to má byť?
« Odpověď #30 kdy: 20-08-2017, 14:37:08 »
Citace
VT chci naucit zobrazovat podle konfigurace, ne podle konkretniho typu record. Ty nebudou existovat.
:o :o :o
Nebolo by v takom prípade lepšie použiť TeeGrid? Platený komponent dokončený asi pred 3 mesiacmi.
Len neviem či umožňuje zobraziť aj strom. Mám pocit, že nie. A to je veľká výhoda VST.
« Poslední změna: 20-08-2017, 14:40:20 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

96689

  • Host
Re:Identifikátor pre volanie procedúry a pod. Aký typ to má byť?
« Odpověď #31 kdy: 20-08-2017, 15:11:12 »
Citace
VT chci naucit zobrazovat podle konfigurace, ne podle konkretniho typu record. Ty nebudou existovat.
:o :o :o

No neni duvod :)

Pokud je aplikace jen o vkladani, editaci a mazani dat, neni treba aby existovala jakakoli typovost (recordy nebo objekty). Vse je popsano schematem databaze.

Typovost v takovych pripadech prinasi risk v podobe toho, ze se clovek v kodu "upise" (record se vyrobi, rucne naplni z DB poli, pri zobrazovani castuje po vetsinu casu na string a pri ukladani do DB manualne sype do parametru), to je dost velke riziko. To se da v runtime bindingu snadno "naklikat". Da se pak i jednoduse vyrobit runtime editor formulare pro "novou" tabulku bez nutnosti rekompilace a design time skladani formu. Staci si pamatovat pozici kontrolky, jeji typ a na jaky sloupec je navazbena. To je v podstate to k cemu design smeruju.

A takovy maly framework si pak muzu prenest do dalsi podobne aplikace.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3339
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Identifikátor pre volanie procedúry a pod. Aký typ to má byť?
« Odpověď #32 kdy: 20-08-2017, 16:25:47 »
Kód: Delphi [Vybrat]
  1. type
  2.   IDataRow = interface
  3.     function GetData(ColIndex: Integer): Variant; // <- pripadne pointer na buffer z IDataTable cache
  4.   end;
  5.  
[...]
Chci absolutne odstranit typovost.
Tak do toho bych nikdy nesel, protoze jestli neco nechci v programu videt, tak jsou to reference pozici tj. to GetData(i), kde si nikdo nepamatuje, co se za i skryva a v lepsim pripade si ty pozice pojmenuje literaly A kdyz nekdo zmeni tabulku, tak ty literaly nezapomene aktualizovat.... Takhle jsme programovali pred 40 lety v assemblerech...

A kdyz vidim typ variant, tak se mi chce zvracet ;-)



96691

  • Host
Re:Identifikátor pre volanie procedúry a pod. Aký typ to má byť?
« Odpověď #33 kdy: 20-08-2017, 16:33:05 »
[quote  link=topic=15777.msg96686#msg96686 date=1503232053]
Kód: Delphi [Vybrat]
  1. type
  2.   IDataRow = interface
  3.     function GetData(ColIndex: Integer): Variant; // <- pripadne pointer na buffer z IDataTable cache
  4.   end;
  5.  
[...]
Chci absolutne odstranit typovost.
Tak do toho bych nikdy nesel, protoze jestli neco nechci v programu videt, tak jsou to reference pozici tj. to GetData(i), kde si nikdo nepamatuje, co se za i skryva a v lepsim pripade si ty pozice pojmenuje literaly A kdyz nekdo zmeni tabulku, tak ty literaly nezapomene aktualizovat.... Takhle jsme programovali pred 40 lety v assemblerech...

A kdyz vidim typ variant, tak se mi chce zvracet ;-)
[/quote]

Tak to nedoporucuju divat se do zdrojaku FireDAC (TFDDatSRow.GetData) ;D Variant je shit, proti tomu zadna. Skoda ze AnyValue nejak umrelo :'(

Ohledne indexu sloupce, tady jde o binding s modelem. View (napr. VT) vi ktery sloupec z radku si vytahnout (bude mit referenci, mozno IDataCol) nebo jen index (z datasetu nebudu dokola tahat pomoci jmena sloupce, radeji si zjistim index field a pristupuju indexem). Tu metodu ale nejspis upravim (v interface samozrejme nelze pouzit GetAs<T>(Column:...)). Ono je taky dost dulezite si uvedomit, proc tahat z kolekce napr. integer abych ho hned vzapeti castoval na string ktery se ve VT zobrazi. GetAs<string>(Column:...) je urcite rozumnejsi ale vic nez AsString bych necekal.
« Poslední změna: 20-08-2017, 16:51:08 od 96691 »

96692

  • Host
Re:Identifikátor pre volanie procedúry a pod. Aký typ to má byť?
« Odpověď #34 kdy: 20-08-2017, 17:18:54 »
Jako finalni storage se vyplati zkopirovat cele pole TDataSet.FBuffers najednou a pak se bufferu zbavit. Porad to bude implementacne efektivnejsi nez stehovani As<T> do recordu.
« Poslední změna: 20-08-2017, 17:20:33 od 96692 »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3339
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Identifikátor pre volanie procedúry a pod. Aký typ to má byť?
« Odpověď #35 kdy: 20-08-2017, 17:32:43 »
Tak to nedoporucuju divat se do zdrojaku FireDAC

No ja jsem se tam pred lety musel divat vic nez se mi libilo, kdyz jsem migroval cizi aplikace z FIB+ na FireDAC. Pro ilustraci posilam vynatek z nasi interni dokumentace (jako obrazek, protoze to forum nechce text pastnuty z webu rozumne formatovat :-(

Citace
Skoda ze AnyValue nejak umrelo :'(
Ono pytlik jako pytlik, neni nad objektovy pristup a silnou typovou kontrolu...

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3339
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Identifikátor pre volanie procedúry a pod. Aký typ to má byť?
« Odpověď #36 kdy: 20-08-2017, 17:36:13 »
Jako finalni storage se vyplati zkopirovat cele pole TDataSet.FBuffers najednou a pak se bufferu zbavit. Porad to bude implementacne efektivnejsi nez stehovani As<T> do recordu.
Vzhledem k zamyslenemu pouziti ve view pred kterym sedi BFU nevim, kam pospichas ;-)

96695

  • Host
Re:Identifikátor pre volanie procedúry a pod. Aký typ to má byť?
« Odpověď #37 kdy: 20-08-2017, 17:52:25 »
[quote  link=topic=15777.msg96692#msg96692 date=1503242334]
Jako finalni storage se vyplati zkopirovat cele pole TDataSet.FBuffers najednou a pak se bufferu zbavit. Porad to bude implementacne efektivnejsi nez stehovani As<T> do recordu.
Vzhledem k zamyslenemu pouziti ve view pred kterym sedi BFU nevim, kam pospichas ;-)
[/quote]

To je jen side efekt kopirovani z TDataSet. Coz o to, data bych klidne nechal v TDataSet, ale nevim jak bych do nej dostal detail pohledy nekolika master zaznamu (SQL command ve stylu WHERE FK IN (1, 2, 3, 4...) je nemyslitelny). A kdybych recordy z TDataSet kopiroval do pole Variant tak to bude kyblik sr***k. Proste misto kolekce typovych recordu budu drzet pole poli bytu (a offsetu) na ktere budu sahat az v runtime podle konfigurace view-controlleru (protoze v kodu jsou mi k nicemu kdyz view o datech nema nic vedet). Jeste to zvazim.

[quote  link=topic=15777.msg96691#msg96691 date=1503239585]
Citace
Skoda ze AnyValue nejak umrelo :'(
Ono pytlik jako pytlik, neni nad objektovy pristup a silnou typovou kontrolu...
[/quote]

Toho se prave chci zbavit. Bavime se jen o jednoduchem editoru tabulek. Jestli si vytvorim maly, uzivatelem nebo mnou klikatelny framework nebo desitky typu ktere budu manualne plnit a sypat zpet do parametru query a pro kazdy vytvaret v design time formular, mam asi vybrano. Spis nez vyzdvizeni typovosti ktera je pro cteni a zapis do DB v podstate k nicemu (zmenim schema, musim menit record, pristup k datum a cely projekt zkompilovat; framework zjisti kompatibilitu typu podle ulozene definice bindingu a dokaze problem vyresit "na miste") bych vyzdvihl chybovost ktera muze nastat treba jen pri plneni nebo cteni 2 string poli jednoho recordu. Kompilator v takovem pripade bude spokojeny. Framework se nesplete.
« Poslední změna: 20-08-2017, 18:18:10 od 96695 »

96696

  • Host
Re:Identifikátor pre volanie procedúry a pod. Aký typ to má byť?
« Odpověď #38 kdy: 20-08-2017, 18:26:14 »
[quote  link=topic=15777.msg96695#msg96695 date=1503244345]
To je jen side efekt kopirovani z TDataSet. Coz o to, data bych klidne nechal v TDataSet, ale nevim jak bych do nej dostal detail pohledy nekolika master zaznamu (SQL command ve stylu WHERE FK IN (1, 2, 3, 4...) je nemyslitelny).
[/quote]

Jiste, jak uz jste tu psali, procka by mohla vratit multiple resultset..