Autor Téma: XE6 FireDAC SQLite - ako zobrazit TEXT stlpec v gride, teraz ukazuje (WIDEMEMO)  (Přečteno 1649 krát)

Offline forget123

  • Mladík
  • **
  • Příspěvků: 76
  • Karma: 3
    • Verze Delphi: XE6
Mam takuto SQLite tabulku:

create table pokus (
  id integer not null primary key autoincrement,
  name text,
  name2 char(20)
);
insert into pokus (name, name2) values ('asdf', 'asdfasd');

Ked do dbgridu zobrazim:

select * from pokus

Tak to zobrazi:

Id Name Name2
1  (WIDEMEMO) asdfasdf

Jak dosiahnem aby aj text stlpec bol zobrazeny normalne?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4397
  • Karma: 39
    • Verze Delphi: XE7 professional
Ja síce používa TVirtualStringTree, ale na žiaden problém som nenarazil. Ale pri všetkých typoch Text mám zadanú dĺžku. Podľa ukážky tam máš memo a preto to asi nejde. Skús tam definovať dĺžku reťazca.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 208
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Poor
Rated 1 time
To si zase ten firedac neco pribasnil a o vlastni vuli usoudil.... sqlite totiz nic jako char(20) neumi, pro nej je to text, a delku nijak neomezuje. Takze firedac podle deklarace svevolne usoudil, ze se k tomu bude nejak chovat.

Sqlite samo o sobe toti umi jen:
Text - lhostejno jak dlouhy
Integer - lhostejno, jestli 8, 16, 32 nebo 64 bitu
Real
Blob

Viz. https://www.sqlite.org/datatype3.html

Takze jak vidis, ve tve deklaraci je name a name2 zcela totozne. Za jakekoliv rozdilne chovani pak musi moci tvuj wrapper, tedy firedac. S nim neporadim,ristupuji k sqlite bez techto univerzalnich frameworku.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4397
  • Karma: 39
    • Verze Delphi: XE7 professional
Poor
Rated 1 time
Vyzerá to tak, že ten FireDAC.SQLite nie je dotiahnutý. Asi dôvod na jeho opustenie. Tým pádom ma napadá otázka.

Ak FireDAC.SQLite zlyháva, tak ako pristupovať k SQLite bez toho, aby som musel niečo extra programovať?
Predpokladám, že odpoveď nájdem na stránke SQLite. Pokiaľ pôjde len o skopírovanie nejakých dll a spol. (viď FireBird embeded), tak to by nevadilo. Akákoľvek inštalácia čohosi u užívateľa je pre mňa tabu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 208
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Sqlite samo o sobe nkkdy zadnou instalaci nepotrebocalo. Je to jen jeden doubor sqlite3.dll, kterou nahrajes na stejne misto, kde mas exe tvoji aplikace. Zafne registrace ci instalace do systemu!

Pak je uz na tobe, jake komponenty nebo jen unity pouzijes, pres ktere se budes s tim dll bavit. Ja se spoleham na vlastni lehkotonazni primocary kod v knihovne sqlitewrap.

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 459
  • Karma: 20
    • Verze Delphi: D2007, XE3
Excellent
Rated 1 time
Vyzerá to tak, že ten FireDAC.SQLite nie je dotiahnutý. Asi dôvod na jeho opustenie. Tým pádom ma napadá otázka.

Tomu never. FireDAC pracuje slusne s ovela narocnejsimi databazami. Na SQLite toho nie je moc co pokazit, teda aspon pre tak schopnych autorov ktory vytvorili FireDAC (cize AnyDAC). Problem tu ale vznika prave v tom ze FireDAC je az prilis velky a snazi sa interne vyrovnat co najvacsie mnozstvo rozdielov medzi databazami, cize vykonava medzi db a aplikaciou znacne kvantum rezie a kadeco sa snazi prisposobit a zjednotit. No a tu mozu vznikat problemy a vzdy budu vznikat.

Inac hore uvedeny problem by sa mohol dat vyriesit pomocou Data type mappingu:

http://docwiki.embarcadero.com/RADStudio/XE7/en/Data_Type_Mapping_(FireDAC)

Geby ma pravdu, sqlite naozaj pozna len 4 datove typy. A podla mna to je presne to co je na nej tak krasne. SQLite rozumie vacsine datovych typov ktore sa v SQL pouzivaju ale interne si ich prevadza na svoje zakladne 4. A tu je naozaj diskutabilne ci FireDAC chybne vyhodnotil ten stlpec. Podla mna dobre. Pretoze v SQLite stlpec typu TEXT je naozaj memo, pretoze do neho mozes ulozit dlhy text limitovany len schopnostami SQLite. Ono i ten Char(20) je tiez memo, ale FireDAC rozslije TEXT a CHar(x) tak sa rozhodol pre memo v prvom pripade a pre kratky text v druhom.

Ale SQLite ti naozaj umozni do fildu name2 Char(20) nakopirovat celu disertacnu pracu, jedno ako dlhu. Ak by ti nepomohol ten datatype mapping, tak aj ten stlpec name nadefinuj ako Char(nieco). Nebude to moc dobre, ale firedac tym oblbnes. Ale na druhu stranu by som nebol prekvapeny ak by Firedac pri insertovani a updatoch kontroloval dlzky zadavanych textov este pred odpalenim SQL dotazu nad db. Mozno nie, neskumal som to, ale prekvapeny by som z toho nebol. Pretoze to je presne to co tie velke wrapere robia. Robia niekedy az prilis vela...

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2329
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Sqlite samo o sobe nkkdy zadnou instalaci nepotrebocalo. Je to jen jeden doubor sqlite3.dll, kterou nahrajes na stejne misto, kde mas exe tvoji aplikace. Zafne registrace ci instalace do systemu!


FireDAC pouziva na windows linkovany obj soubor, na Androidu nebo iOS sqlite ze systemu.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4397
  • Karma: 39
    • Verze Delphi: XE7 professional
V konfiguračnom súbore sa dá nastaviť, aby si natiahol inú dll.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.