Autor Téma: SQLite a DBase  (Přečteno 585 krát)

Offline PetrB0

  • Plnoletý
  • ***
  • Příspěvků: 108
  • Karma: 1
    • Verze Delphi: Delphi XE2, Delphi 10.2 Tokyo, Delphi 10.41
SQLite a DBase
« kdy: 26-08-2020, 13:13:55 »
Ahoj,
pro přístup na starší data v DBase IV formátu používám kombinaci SQLite a UNIDac. Což celkem obstojně funguje.
Můj problém je v tom, že chci do jedné tabulky přidat index. Použil jsem SQLite syntaxi (https://www.techonthenet.com/sqlite/indexes.php):
Kód: [Vybrat]
CREATE INDEX obchody_evm_idx ON obchody(VALUTA);
Když ovšem dotaz, který to obsahuje spustím, tak mi to vrátí chybu: FieldName expected.
Zkusil jsem to včetně testu na existenci
Kód: [Vybrat]
CREATE INDEX IF NOT EXISTS obchody_evm_idx ON obchody(VALUTA);
a to mi vrátilo chybu: Table EXISTS not found.

Nevíte co s tím?

Díky

Pb



Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3292
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:SQLite a DBase
« Odpověď #1 kdy: 26-08-2020, 15:10:56 »
Ja bych si spustil consoli sqlite3.exe a podival se, jake indexy pro danou tabulku existuji, jestli jdou vytvorit a jesti ti bude fungovat pozadovany DML command tj. vzdy, kdyz se vyskytly u jakehokoli RDBMS podivnosti, tak jsem se obracel ke korenum tj. k nejake nativni konsoli, kde mezi mnou a driverem nestoji zadny skodic. Nevim, jestli to nejak nemenili, ale pred lety se dalo napsat:
Kód: SQL [Vybrat]
  1. SELECT * FROM sqlite_master WHERE TYPE='index' AND tbl_name='VALUTA';
a ten create index taky funguje:
Kód: SQL [Vybrat]
  1. CREATE INDEX IF NOT EXISTS obchody_evm_idx ON obchody(VALUTA);
Je mozne, ze to nefunguje kvuli nejakemu SQL parseru na urovni connectivity.

Offline PetrB0

  • Plnoletý
  • ***
  • Příspěvků: 108
  • Karma: 1
    • Verze Delphi: Delphi XE2, Delphi 10.2 Tokyo, Delphi 10.41
Re:SQLite a DBase
« Odpověď #2 kdy: 26-08-2020, 16:48:24 »
Díky, on ten parser je fakt nějakej divnej. Obecně se mu nelíbí konstrukce If exists... Teď zrovna jsem zkoušel DROP TABLE IF EXISTS a tam mi suše napsal, že tabulka IF neexistuje.
Budu se s tím muset nějak poprat. Potřebuji načíst data a vytvořit jednoduchou tabulku (případně zrušit její předchozí verzi). Ale možná se na tu tvorbu vybodnu a půjdu cestou nějakého csv nebo něčeho podobného.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3292
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:SQLite a DBase
« Odpověď #3 kdy: 26-08-2020, 17:34:02 »
Obecně se mu nelíbí konstrukce If exists... Teď zrovna jsem zkoušel DROP TABLE IF EXISTS a tam mi suše napsal, že tabulka IF neexistuje.
Muzes to udelat na urovni tveho kodu, ze existenci zkontrolujes dotazem do tabulky sqlite_master a pak udelas v pripade potreby obyc. DDL command bez toho exists.

Offline PetrB0

  • Plnoletý
  • ***
  • Příspěvků: 108
  • Karma: 1
    • Verze Delphi: Delphi XE2, Delphi 10.2 Tokyo, Delphi 10.41
Re:SQLite a DBase
« Odpověď #4 kdy: 26-08-2020, 22:27:53 »
Máš pravdu, došel jsem ke stejnému zjištění. Bohužel tam je více problémů dotazy, ale snad se tím v nějakém rozumném čase prokoušu. Jinak půjdu jinou cestou.

Díky za konzultaci.

Pb