Databáze > Ostatní DB

UniDAC + SQLite + extensions

(1/2) > >>

paja1978:
Ahoj,

používám Delphi + UniDAC + SQLite. Protože ve svém projektu potřebuji tabulky s jednotlivými roky v samostatných sloupcích, chci do SQLite přidat rozšíření "pivot_vtab" (https://antonz.org/sqlite-pivot-table/), podle položky návodu "3. Pivot extension". Pro připojení k databázi používám komponentu UniDAC.

Úspěšně jsem zkompiloval DLL s „pivot_vtab“. Dále nastavil parametry UniConnection: načetl extension dle manuálu (https://docs.devart.com/unidac/using-sqlite.htm). Až posud vše v pořádku. Poté jsem v databázi vytvořil tabulku 'sales' (obyčejná tabulka s daty) a 'v_sales' – tabulka vytvořená na základě připojeného 'pivot_vtab', dle následujícího kódu z návodu:

create virtual table v_sales using pivot_vtab (
  (select distinct product from sales),
  (select distinct year, year from sales),
  (select sum(income) from sales where product = ?1 and year = ?2)
);

Vytvoření tabulky proběhlo v pořádku. Ale když se pokouším tuto tabulku spustit ('select * from v_sales;'), dojde k následující chybě:
* Exception class $C0000005 with message 'c0000005 ACCESS_VIOLATION'. Process Project1.exe (7996)
* Exception class EAccessViolation with message 'Access violation at address 00007FF97B88F1E3 in module 'sqlite3.dll'. Read of address FFFFFFFFFFFFFFFF'. Process Project1.exe (7996)

Můj kód v Delphi je následující:
UniConnection.SpecificOptions.Values['EnableLoadExtension'] := 'True';
UniConnection.ExecSQL('SELECT load_extension(''pivot_vtab.dll'');');
UniQuery.sql.Text := 'select * from v_sales;';
UniQuery.ExecSQL; // tady vznikne chyba!!!

Popravdě, netuším kde nebo v čem může být problém ... poradíte někdo?

Předem děkuji za odpovědi, Pavel

Stanislav Hruška:
Vôbec to nepoznám. Z iných diskusií viem, že v niektorých prípadoch sa nesmie použiť "select * ...". Jednotlivé stĺpce sa musia vymenovať. Skús to.

paja1978:
Zkoušel jsem vyjmenovat některé sloupce a nefunguje to, po načtení "pivot_vtab.dll" funguje jen vytvoření a smazání tabulky v_sales ...

jirka52:
Nemohu tvůj problém nasimulovat, ale zkoušel jsi ten select bez středníku v těch uvozovkách, tj.:
UniQuery.sql.Text := 'select * from v_sales';

paja1978:
I bez středníku, pořád stejná chyba.

V prvním příspěvku to nebylo uvedeno, ale chtěl jsem vyloučít, že chyba je někde v dalším kódu, tak jsem si vytvořil miniprojekt, kde je jen nezbytné potřebné minimum (connection, query, tabulka, ...), a bez úspěchu ...

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi