Autor Téma: FireDAC.MemTable - poradie záznamov.  (Přečteno 2689 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5970
  • Karma: 43
    • Verze Delphi: W10 + D11
FireDAC.MemTable - poradie záznamov.
« kdy: 23-07-2017, 11:07:00 »
Môžem sa spoľahnúť, že ak si naplním MemTable
Kód: Delphi [Vybrat]
  1. FDMemTable1.CopyDataSet(Query1, [coStructure, coRestart, coAppend]);
a Query1 obsahuje ORDER BY, tak poradie záznamov bude zachované?
Alebo si ho musím vynútiť  MemTable.Indexes := ...
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

96551

  • Host
Re:FireDAC.MemTable - poradie záznamov.
« Odpověď #1 kdy: 23-07-2017, 14:02:35 »
Spolehnout se pravdepodobne da (nemam po ruce zdrojak, a i kdybych mel, nemuzu zarucit bez kontraktu v helpu budoucnost). FireDAC ale nebude "nahodile" skakat kurzorem (musi pocitat i s tim, ze muze byt kurzor zdrojoveho datasetu jednosmerny). To by byla hloupost. Co help napovedel je ze coRestart skoci kurzorem za zacatek.

Kopirovani pres Data property kopiruje interni storage (tam bych si tohle tvrdit netroufl).
« Poslední změna: 23-07-2017, 14:31:43 od 96551 »

96552

  • Host
Re:FireDAC.MemTable - poradie záznamov.
« Odpověď #2 kdy: 23-07-2017, 14:46:00 »
Dalo by ovsem predpokladat ze ma query objekt index nad radicim sloupcem. V takovem pripade by se daly do cile zkopirovat i indexy, nebo tomu tak neni nebo je to nezadouci? Stacilo by pridat flag coIndexesCopy.
« Poslední změna: 23-07-2017, 14:48:04 od 96552 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5970
  • Karma: 43
    • Verze Delphi: W10 + D11
Re:FireDAC.MemTable - poradie záznamov.
« Odpověď #3 kdy: 23-07-2017, 16:08:13 »
Ja mám radenie podľa 6 polí, ktoré menujem. Síce sú to cudzie kľúče, ale to je všetko. A query ťahá údaje z viacerých tabuliek.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3286
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:FireDAC.MemTable - poradie záznamov.
« Odpověď #4 kdy: 23-07-2017, 16:21:45 »
Ja mám radenie podľa 6 polí, ktoré menujem. Síce sú to cudzie kľúče, ale to je všetko. A query ťahá údaje z viacerých tabuliek.
To je prece jedno, ne? Ta data budou usporadana SQL dotazem a z Query cteny
Kód: Delphi [Vybrat]
  1. while not Query.Eof do
  2.   begin
  3.      Query.Next()
  4.   end;
  5.  
Takze do interni pameti je dostanes urcite ve stejnem poradi. A poradi ctene z MemTable bude dano indexem - nevim, jestli ma nejaky/zadny by default. Ale stejna iterace pres MemTable by IMHO mez indexu mela vracet nativni poradi (zkopirovane z Query1) z bufferu.