Autor Téma: SQLite - chyby v SQL. Access ich nemá.  (Přečteno 3053 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2870
  • Karma: 27
    • Verze Delphi: XE7 professional
SQLite - chyby v SQL. Access ich nemá.
« kdy: 10-06-2016, 21:29:19 »
Ja sa z toho SQLite picnem.
Uvedné kódy mi pod ADO (Access) bežia bez problémov
Kód: [Vybrat]
  FDQuery.SQL.Add(
    'SELECT Max(DateOfAction)'+
    ' FROM Rounds'+
    ' WHERE FKCompetitions = :FKCompetitions');
  FDQuery.ParamByName('FKCompetitions').Value := GetIDCompetition;
  FDQuery.Open;
  MaxDate := DateToStr(FDQuery.Fields.Fields[0].AsDateTime);
raised exception class EConvertError with message ''2016-09-04' is not a valid date and time'.
Ak vyhodím agregačnú funkicu Max, tak to zbehne.

Kód: [Vybrat]
'SELECT Sequence.*,'+
  ' (SELECT COUNT(*)'+
  ' FROM (SELECT TempResult.FKMembers, Sum(TempResult.Score) AS SumScore'+
        ' FROM TempResult GROUP BY TempResult.FKMembers) AS xxx'+
  ' WHERE xxx.SumScore >= Sequence.SumScore) AS Ranking'+
' FROM (SELECT TempResult.FKMembers, Sum(TempResult.Score) AS SumScore'+ // zdes
      ' FROM TempResult GROUP BY TempResult.FKMembers) AS Sequence');
raised exception class ESQLiteNativeException with message '[FireDAC][Phys][SQLite] ERROR: misuse of aggregate: Sum()'
Výnimka sa týka druhého výskytu sum

Ako na to?
« Poslední změna: 10-06-2016, 21:36:28 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 164
  • Karma: 13
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #1 kdy: 10-06-2016, 21:55:09 »
Minimalne v tom prvnim pripade to neni exception ze sqlite, ale z Delphi rtl. Tipuji, ze sqlite ten dotaz vesele provedlo, ale az tebou pouzity Delphi wrapper se osypal z vraceneho data, nebot asi pouzivas jiny format pro datum.

Vic ti k tomu neporadim, protoze na sqlite zadadne pouzivam muj sqlitewrap. To mi pripomina, ze bych mel zase nekdy zverejnit aktualni verzi.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 164
  • Karma: 13
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #2 kdy: 10-06-2016, 22:00:42 »
Jeste jedna vec, sqlite nema nativni typ sloupce pro datum. Jestli se jej nesnazi tvuj wrapper nejakym nestastnym zpusobem simulovat...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2870
  • Karma: 27
    • Verze Delphi: XE7 professional
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #3 kdy: 10-06-2016, 22:16:31 »
Vďaka. No to mi nepomôže. S tým formátom akosi nesúhlasím kedže DateOfAction je v pohode a Max(DateOfAction) nie.

Narazil som na ďalší problém. Použil som v programe Insert into a tabuľka je prázdna. Presne ten istý text mi v SQLiteStudio pridá záznamy.
Kód: [Vybrat]
  FDCommand.CommandText.Clear;
    FDCommand.CommandText.Add(
      'INSERT INTO TempResult (FKRounds, FKMembers, Score, FKTEAMS)'+
      ' SELECT Rounds.IDRounds, Members.IDMembers, Results.Score, RESULTS.FKTEAMS'+
      ' FROM Rounds'+
        ' INNER JOIN (Members INNER JOIN Results'+
          ' ON Members.IDMembers = Results.FKMembers) ON Rounds.IDRounds = Results.FKRounds'+
      ' WHERE (Rounds.FKCompetitions = :FKCompetitions)');

  FDCommand.ParamByName('FKCompetitions').Value := GetIDCompetition;
  FDCommand.Transaction.StartTransaction;
  FDCommand.Execute;
  FDCommand.Transaction.CommitRetaining;
To je na mňa priveľa. Veď na takú prácu sa môžem ...
« Poslední změna: 10-06-2016, 22:19:28 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 164
  • Karma: 13
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #4 kdy: 11-06-2016, 07:23:50 »
Tak si nesouhlas jak vhces, ale nejaka cckova dll knihovna tezko zavola delphi exception econverterror. Opakuji, problem je v tom, pres co se snazis pristupovat k sqlite.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2870
  • Karma: 27
    • Verze Delphi: XE7 professional
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #5 kdy: 11-06-2016, 09:20:48 »
Citace
Opakuji, problem je v tom, pres co se snazis pristupovat k sqlite.
Niežeby som v princípe nesúhlasil, len mi to nejde do hlavy. S agregačnou funkciou chyba! Keď to má byť štandardné správanie, tak SQLite opustím. Ešte mu dám nejakú šancu. Možno pomôže nastaviť vo FireDAC formát prevodu.
Použil som FireDAC.SQlite, keď už má v sebe všetko zabudované.

A už vôbec neviem čo si mám myslieť o správaní uvedenom o 22:16:31
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 164
  • Karma: 13
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #6 kdy: 11-06-2016, 15:49:29 »
Opravdu nevim, jak sis nadeklaroval databazi. Opravdu nevim, jak si tu deklaraci prebasnilo firedac, takze opravdu nevim, jaka je SKUTECNA deklarace. Nevim ani, jaka tam mas data. Nevim, jak si tvuj databazovy dotaz prebasnilo firedac. Kristalovou kouli fakt nemam.

Ani nevim, jakou vubec pouzivas verzi sqlite, muze jit klidne o davno opravenou chybu.

Zakladni diagnostika muze byt takova, ze si databazi otevres primo v prikazove konzoli sqlite3.exe a zkusis si, co ti to na ten dotaz rekne tam.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2870
  • Karma: 27
    • Verze Delphi: XE7 professional
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #7 kdy: 11-06-2016, 16:09:27 »

Opravdu nevim, jak sis nadeklaroval databazi. Opravdu nevim, jak si tu deklaraci prebasnilo firedac, takze opravdu nevim, jaka je SKUTECNA deklarace. Nevim ani, jaka tam mas data. Nevim, jak si tvuj databazovy dotaz prebasnilo firedac. Kristalovou kouli fakt nemam.

Ani nevim, jakou vubec pouzivas verzi sqlite, muze jit klidne o davno opravenou chybu.

Zakladni diagnostika muze byt takova, ze si databazi otevres primo v prikazove konzoli sqlite3.exe a zkusis si, co ti to na ten dotaz rekne tam.
Už to neriešim. Vrátil som sa k Access-u. Ten mi na malé veci plne vyhovuje. Síce jeho JOIN sa nedá čítať, ale ten si nechám vždy generovať. A nové veci mimo Delphi, FastReport a FireBird sa mi študovať nechce. Veď nestíham ani to.

Siahol som po verzii 3. Otváral som ju vo dvoch manažéroch. sqlitestudio-3.1.0 a Valentine . A Valentine tam narobil poriadny bordel. Mal som rozbité foreign key a kto vie čo ešte.

Krištáľovú guľu môžem požičať  ;D
« Poslední změna: 11-06-2016, 16:11:29 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 416
  • Karma: 15
    • Verze Delphi: D2007, XE3
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #8 kdy: 11-06-2016, 18:07:04 »
Ak ti to je tak jednoduchsie, kludne si to dories cez Access. Voci tomu nic nemam (az na to ze namiesto jednej 300kB dll kniznice si koli Accessu musis nainstalvoat mikrosoftacky balik o velkosti neviem kolkych stovak megabajtov). Len ti chcem povedat aby si koli tymto paru problemom ktore si riesil v poslednych vlaknach na SQLite nezanevrel. Nebude to totiz celkom chyba SQLite. S obdobnymi nezrovnalostnymi problemami sa budes potykat aj pri prechode na hociake ine db riesenia. Proste to neni celkom chyba SQLite ze to nejde uplne hladko. Uplne hladko to totiz nejde nikdy. A ked nemas cas si to nastudovat tak ti nevycitam ten Access. Aj ked ja by som v tvojom pripade asi access uplne opustil a ostal by som pri SQLite a Firebird.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 164
  • Karma: 13
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #9 kdy: 11-06-2016, 18:33:29 »
Ja se neptal na managery, ale na konkretni verzi. Ptal jsem se treba i proto, ze nedavno tam byla opravena zavlecena chyba u agregacnich funkci. Na rozdil od jinych databazi si kazdy program s sebou nese svuj vlastni databazovy engine, a tak hodne zalezi na konkretni verzi sqlite u kazdeho programu, ve kterem se snazis databazi otevrit. Jinak se ti snadno stane i to, ze se to bude ve dvou programech chovat jinak.

Vyplati se sledovat changelogy. Vis o opravenych chybach, ale vis i o novych vlastnostech, ktere mohou byt velmi uzitecne. Akorat ten firedac ci jine univerzalni frameworky ty novinky nikdy nedokaze vyuzit. Sqlite ale neni nahrada za jine databaze, jeho pouziti je silne prave v oblastech, kde by velka databaze byla ponekud na hlavu. Proto je snaha o preklopeni stavajici databaze do sqlite trochu posetila. A proto mi prijde lepsi pouzit nejaky lehky wrapper usity na miru, s moznosti primeho volani sqlite api.

P.s. pisu jak tatar, protoze to tu vsechno datluji nesikovnymi hnaty do maleho mobilu.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2870
  • Karma: 27
    • Verze Delphi: XE7 professional
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #10 kdy: 11-06-2016, 20:00:34 »
Tak už len posledná reakcia (snáď)
Citace
(az na to ze namiesto jednej 300kB dll kniznice si koli Accessu musis nainstalvoat mikrosoftacky balik o velkosti neviem kolkych stovak megabajtov)
Ale to nie je pravda. Všetko potrebné je už niekoľko rokov samozrejmou súčasťou Windows. Netreba nič inštalovať. Snáď tak na WXP.
Citace
Len ti chcem povedat aby si koli tymto paru problemom ktore si riesil v poslednych vlaknach na SQLite nezanevrel.
Veď som ani poriadne nezačal a už sa neviem pohnúť. No SQLiteStudio 3.0.7 má uvedené, že pracuje s SQLite ver. 3.8.10.

Inšpirovali ste ma pozrieť sa presnejšie a teraz je verzia 3.1.0 s podporou SQLite 3.9 kde okrem iného je:
Fixed incorrect recreation of foreign keys chain.
Fixed locking database executions when counting rows in huge tables.
Fixed RAISE() function formatting in enterprise formatter (used to produce invalid SQL - tu neviem čo presne si mám pod tým predstaviť
Fixed error with DEFAULT constraint containing datetime('now', 'localtime').

No, za pokus nič nedám. Dám vedieť.
Citace
Proto je snaha o preklopeni stavajici databaze do sqlite trochu posetila.
Nepreklápal som. Ja som to robil komplet od začiatku na základné prečítaných príspevkov a že pri FireDAC SQLite je už všetko potrebné v exe. Neviem ako sa prejavia opravy tých chýb.

Jedna otázočka: tá moja DB sa automaticky prekonvertuje na vyššiu verziu, či mám tomu nejako pomôcť?
« Poslední změna: 11-06-2016, 20:04:50 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2870
  • Karma: 27
    • Verze Delphi: XE7 professional
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #11 kdy: 11-06-2016, 20:39:33 »
Tak som si stiahol poslednú verziu SQLiteStudio 3.1.0 (z 10.06.2016) s podporou SQLite 3.9. Vytvoril novú DB a spustil
Kód: [Vybrat]
    'SELECT Max(Datum) as MaxDate'+    ' FROM Pokus');
  MaxDate := DateToStr(FDQuery.FieldByName('MaxDate').AsDateTime);
  btn2.Caption := MaxDate;
a všetko je v poriadku.  Takže ešte jeden pokus na to dám.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2870
  • Karma: 27
    • Verze Delphi: XE7 professional
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #12 kdy: 11-06-2016, 23:08:52 »
Ale problém s nesprávnym použitím sum ostal. Hlási to FireDAC. Ale v manageri to zbehne bez problémov. 
Buď niekoho niečo napadne, alebo to skúsim rozdeliť na dve časti. Napr. pomocou view.
« Poslední změna: 11-06-2016, 23:16:51 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 164
  • Karma: 13
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #13 kdy: 11-06-2016, 23:17:40 »
Verze 3.9? To se moc kupredu nehnuli, protoze aktualni verze sqlite je 3.13.0.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 164
  • Karma: 13
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:SQLite - chyby v SQL. Access ich nemá.
« Odpověď #14 kdy: 11-06-2016, 23:22:17 »
K upgradu db - do vnitrni struktury databazoveho souboru se malokdy saha, takze pro upgrade nemusis delat nic. Upgraduje se jen samotna sqlite knihovna.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):