Databáze > Firebird a Interbase

Table.Delete OK, Table.Post NIE

<< < (11/11)

Stanislav Hruška:
Tak som si zbežne pozrel TFDMemTable a príslušenstvo. Nevyzerá to zle. Mám funkciu na generovanie SQL textu Into or Update z tabuľky.
Jediný väčší/prácnejší problém vidím v naplnení parametrov správnymi hodnotami. Neviem či sa to deje automaticky, ak použijem MemTable + DataSource.
Môžem tam, kde mám TFDTable bez problémov použiť/zmeniť na TFDMemTable?

Jan Fiala:
Memory tabulka se používá třeba tak, že provedeš dotaz (Query) a data nakopíruješ do memory tabulky - obvykle funkce memorytabulka.CopyData(Query, [...]), které předáš Query a parametry co vše se má převzít - struktura, data atd. Pak query zavřeš a pracuješ offline do doby, než budeš chtít změny zapsat.
Pokud chceš občerstvit data, pak si zapamatuješ pozici (abys zůstal v gridu na místě), provedeš znovu načtení dat - query, CopyData a vrácení pozice. Tohle pohodlně zapouzdříš do volání obecné funkce a nemusíš se o to starat.

Stanislav Hruška:
Hm, v návode som čosi čítal a Queries pre načítanie, update a insert. To si tu FierDAC nemôže vytvoriť automaticky, pretože nepozná tabuľku. Alebo si to pamätám zle.
To kopírovanie údajov dávajú všade. S tým by nemal byť problém.
Zmeny sa zapisujú .Post? Nie je potrebná predtým žiadna príprava?
Pozíciu si musím zapamätať kvôli tabuľke. Čiže PK záznamu. Nie kvôli mriežke, pretože nepoužíva DBGrid.
Ako funguje Locate()? Predpokladám, že si to si musím urobiť sám, nakoľko MemTable nepozná tabuľku.
.
Ďakujem za návod.

Jan Fiala:

--- Citace: Stanislav Hruška  25-10-2020, 12:18:33 ---Ako funguje Locate()? Predpokladám, že si to si musím urobiť sám, nakoľko MemTable nepozná tabuľku.

--- Konce citace ---

Locate provádíš přímo nad memory tabulkou její metodou MemTable.Locate. Nebo možná nerozumím, co jsi chtěl říct tím, že memtable nezná tabulku...
Stejně tak si tam můžeš v případě potřeby vytvářet indexy, nová pole atd.

Pokud to chceš používat pro editaci, je třeba přidat další sloupec, do něj si zachytit změny (insert/update/delete) a při zápisu se s tím poprat a pomocí SQL příkazů to zapsat na server. V případě větších změn to celé přenést do pomocné tabulky na serveru a uloženou procedurou zapsat (transakce až v uložené proceduře těsně před vlastním zápisem).
Ale je to úplně jiný styl práce, než jak jsi pracoval dosud.

Navigace

[0] Seznam témat

[*] Předchozí strana

Přejít na plnou verzi