Databáze > Ostatní DB
UniDAC + SQLite + extensions
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