Autor Téma: UniDAC + SQLite + extensions  (Přečteno 1328 krát)

Offline paja1978

  • Nováček
  • *
  • Příspěvků: 4
  • Karma: 0
UniDAC + SQLite + extensions
« kdy: 06-03-2024, 11:17:06 »
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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7413
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:UniDAC + SQLite + extensions
« Odpověď #1 kdy: 07-03-2024, 16:31:42 »
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.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline paja1978

  • Nováček
  • *
  • Příspěvků: 4
  • Karma: 0
Re:UniDAC + SQLite + extensions
« Odpověď #2 kdy: 12-03-2024, 08:11:21 »
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 ...

Offline jirka52

  • Plnoletý
  • ***
  • Příspěvků: 166
  • Karma: 3
    • Verze Delphi: D2, D5, D6, D2005, D2006, D2009, DXE2,DXE7,D10.2, D11.2, D12.1, D12.2
Re:UniDAC + SQLite + extensions
« Odpověď #3 kdy: 12-03-2024, 12:40:05 »
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';

Offline paja1978

  • Nováček
  • *
  • Příspěvků: 4
  • Karma: 0
Re:UniDAC + SQLite + extensions
« Odpověď #4 kdy: 13-03-2024, 07:55:05 »
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 ...

Offline mirus

  • Mladík
  • **
  • Příspěvků: 76
  • Karma: 12
    • Verze Delphi: Delphi 10.2
Re:UniDAC + SQLite + extensions
« Odpověď #5 kdy: 13-03-2024, 23:29:48 »
Zdravím,

myslím, že pomůže toto: https://github.com/jakethaw/pivot_vtab/pull/8/commits/1e0379e1e4a33528a1d3cc3886fb0f230acfac2f
Předtím to padalo i přímo při testování pomocí sqlite3.exe

Zkompiloval jsem si poslední verzi sqlite 3.45.2 a po té záplatě viz. odkaz to nepadá ani v delphi s UNIDAC.
« Poslední změna: 13-03-2024, 23:32:12 od mirus »

Offline paja1978

  • Nováček
  • *
  • Příspěvků: 4
  • Karma: 0
Re:UniDAC + SQLite + extensions
« Odpověď #6 kdy: 14-03-2024, 07:47:40 »
Díííky!!!!!  :)  Je to ono a funguje to ....

Offline mirus

  • Mladík
  • **
  • Příspěvků: 76
  • Karma: 12
    • Verze Delphi: Delphi 10.2
Re:UniDAC + SQLite + extensions
« Odpověď #7 kdy: 14-03-2024, 08:40:24 »
Excellent
Rated 1 time
Tak to je dobře, že to funguje  ;D n.z.