Forum Delphi.cz

Databáze => Ostatní DB => Téma založeno: PetrB0 07-09-2020, 12:30:00

Název: SQLite a DBase - "FileAge"
Přispěvatel: PetrB0 07-09-2020, 12:30:00
Ahoj,
postupně se prokousávám implementací DBase pod SQLite pod UniDac.  Nevíte, poskytuje SQLite nějakou funkci, která vrátí něco ve smyslu FileAge (tedy spíše TableAge) ? Jde mi o to, že mám dvě tabulky, kdy druhá se počítá (na vyžádání) z té první. Před uzavřením aplikace chci otestovat, zda ten výpočet proběhl. Napadlo mne, že nejlepší by bylo porovnat, která je mladší (která se naposledy editovala). Pokud je mladší jednička, nabídne se uživateli přepočet dvojky. Ale nevím, jak to udělat. Klasické (souborové) FileAge na adresáři otevřeném pod SQLite použit nemohu.

Díky

Pb
Název: Re:SQLite a DBase - "FileAge"
Přispěvatel: Jirka 07-09-2020, 14:20:09
Nebylo by lepší použít pomocnou tabulku s poli  TABLE_1_UPDATE_TIME a TABLE_2_UPDATE_TIME   typu DateTime , do které bys zapisoval datum a čas poslední aktualizace
a pak si při ukončovaní aplikace porovnal ?
Nevím jak to má ale SqLLite ale ve Firebirdu bych to řešel pomocí trigeru

Název: Re:SQLite a DBase - "FileAge"
Přispěvatel: pf1957 07-09-2020, 14:24:26
A je nejaky problem vytvorit extra tabulku s casem, na zacatku transakci ji vynulovat a pri commitu (po ukonceni vypoctu) nastavit na current_timestamp?

Co by se v SQLite dalo udelat, ze v te pocitane tabulce pridas extra pole a nechas ho pri insertu nastavit na default time. To je bez dalsi prace, ale bude to u kazdeho zaznamu:
Kód: SQL [Vybrat]
  1. TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP;
Název: Re:SQLite a DBase - "FileAge"
Přispěvatel: PetrB0 07-09-2020, 15:53:13
No, obecně ano, ale toto je zpracování souborů DBase IV a vzhledem ke spolupráci se staršími aplikacemi si tam nemůžu moc vyskakovat. Tak jsem to trochu obešel. Před otevřením databáze si načtu klasické FileAge všech DBF souborů. Při zápisech si to aktualizuji a to potom v případě potřeby porovnávám. Funguje to jak potřebuji, ale není to tak přímočaré, jak jsem původně očekával.