Autor Téma: TFDTable + Stránkování  (Přečteno 531 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2873
  • Karma: 27
    • Verze Delphi: XE7 professional
Re:TFDTable + Stránkování
« Odpověď #15 kdy: 12-08-2017, 14:09:40 »
Asi to má súvis.
Ak chcem v TFDQuery zmeniť parametre, tak ho musím zavrieť, nastaviť parametre a potom ho znova otvoriť. Ja som inú možnosť nenašiel. Ale ja som v tom slabý.

Ja ako laik by som danú úlohu riešil tak, že by som natiahol všetky záznamy a podľa potreby načítaval sadu záznamov pomocou zmeny kurzora.
Tak ako to tu rozoberáte, mi to vôbec nejde do hlavy ;)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Plnoletý
  • ***
  • Příspěvků: 231
  • Karma: 9
    • Verze Delphi: 2009, Tokyo
Re:TFDTable + Stránkování
« Odpověď #16 kdy: 12-08-2017, 15:12:53 »
Asi to má súvis.
Ak chcem v TFDQuery zmeniť parametre, tak ho musím zavrieť, nastaviť parametre a potom ho znova otvoriť. Ja som inú možnosť nenašiel

To prave neni uplne efektivni. Funguje to tak ze se dotaz otevre, a pak se meni jen parametry a vola metoda Refresh. Tim volanim Refresh se pak posilaji jen hodnoty parametru (DBMS nemusi znovu kompilovat stejny dotaz). Zavrenim a otervenim se prave dotaz na strane DBMS nejspis vzdy znovu kompiluje, pokud tedy neni DBMS natolik inteligentni a vsimne si opakovaneho volani dotazu ktery po kompilaci vypada naprosto stejne (ma stejny execution plan), jen s jinymi hodnotami (o cemz se tu ted bavime).

Kód: Delphi [Vybrat]
  1. FDQuery.SQL.Text := 'SELECT Field1 FROM MyTable WHERE Field2 > :MyValue';
  2. FDQuery.ParamByName('MyValue').AsInteger := 666;
  3. FDQuery.Open;
  4.  
  5. FDQuery.ParamByName('MyValue').AsInteger := 667;
  6. FDQuery.Refresh;
« Poslední změna: 12-08-2017, 15:25:36 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Delfin

  • Plnoletý
  • ***
  • Příspěvků: 231
  • Karma: 9
    • Verze Delphi: 2009, Tokyo
Re:TFDTable + Stránkování
« Odpověď #17 kdy: 12-08-2017, 16:38:10 »
kdyz poslu parametrizovany SQL, tak si ho server rozparsuej, optimalizuje a ulozi a zrejme vrati nejake jeho handle. No a vsechny nasledujici dotazy uz posilaji jinym protokolem jen seznam parametru.

Je tomu tak. Jinak zbezne jsem se dival kolem a zda se ze nektere servery si vyrabi i "offline" cache pro (parametrizovane) dotazy (vyrobi hash dotazu a ulozi si jej spolu s planem). Nikde jsem ale nenasel zminku o porovnani planu (tj. pokud se najde stejny plan, pouzije se jeho cache dat, pokud je to mozne). Napr. pro tyto 2 dotazy:

Kód: MySQL [Vybrat]
  1. SELECT MyField FROM MyTable WHERE SomeField BETWEEN 100 AND 500 ORDER BY MyField
  2. SELECT MyField FROM MyTable WHERE SomeField BETWEEN 200 AND 400 ORDER BY MyField

asi DBMS nepujde az tak daleko ze by porovnal plany a sahl pro data z cache prvniho dotazu.
« Poslední změna: 12-08-2017, 16:57:25 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: