Autor Téma: SQLite - zápis dátumu v Select  (Přečteno 4328 krát)

Online František

  • Hrdina
  • ****
  • Příspěvků: 275
  • Karma: 3
    • Verze Delphi: primárne v XE5, občaas 10.1 starter, XE, BDS2006
Re:SQLite - zápis dátumu v Select
« Odpověď #15 kdy: 14-06-2016, 08:59:15 »
troska odveci - ale preco is opustil firebird?

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2964
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:SQLite - zápis dátumu v Select
« Odpověď #16 kdy: 14-06-2016, 09:00:41 »
Ja som ho neopustil. Ale na takú mini aplikáciu je to zbytočne veľký moloch.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 420
  • Karma: 15
    • Verze Delphi: D2007, XE3
Re:SQLite - zápis dátumu v Select
« Odpověď #17 kdy: 14-06-2016, 10:02:32 »
Ako prinútim FireDAC aby dátum uložil v unix formáte? To bolo prvé čo ma napadlo. Číslo je číslo. Radšej používať tie funkcie, než mať bordel. Akurát to v náhľade neprečítam.

Tak proste polopatistikcy. Ad jedna nadefinujes si stlpce DATEFROM a DATETO ako integer. Ale ako uz bolo napisane to ti v sqlite nzabrani aby si do nich ulozil text, je to divne a ale je to specifikum sqlite. Ale na druhu stranu aspon firedac bude informovany o tom ze dany stlpec je celociselne cislo a mozno aspon on bude protestovat. No a ad dva potom proste inzerty budes robit cez parametre ako integery cize nejako takto:

Kód: [Vybrat]
  FCommand.Params.ParamByName('DATETO').AsInteger := DateTimeToUnix(Now);

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 420
  • Karma: 15
    • Verze Delphi: D2007, XE3
Re:SQLite - zápis dátumu v Select
« Odpověď #18 kdy: 14-06-2016, 10:09:54 »
A najlepšie by to bolo bez času. Len čistý dátum.

tak unix time je proste pocet sekund od 1970, to nie je jak TDateTime ktoreho celociselna cast je pocet dni a desatinna cast vyjadruje cas zo dna. Ak chces mat vzdy ulozeny presne zaciatok dna tak bud pouzijes ofiko funkciu StartOfTheDay(Now) alebo len prasacky odstrihnes desatinu cast z TDateTime cize Trunc(Now).

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1834
  • Karma: 85
    • Verze Delphi: D2007, XE3, DX10
Re:SQLite - zápis dátumu v Select
« Odpověď #19 kdy: 14-06-2016, 11:01:53 »
Ale ako uz bolo napisane to ti v sqlite nzabrani aby si do nich ulozil text, je to divne a ale je to specifikum sqlite.
Jestli ti to pamatuju, tak kdyz jsem s Sqlite kdysi zacinal, tak mel jen INT (na klice) a TEXT (ASCIIZ) na vsechna ostatni data.
Hwaci pak zacal od tohoto pruzracneho konceptu ustupovat tlaku DB verejnosti a zacal z toho delat kocko-psa. Z meho pohledu bohuzel.



Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 420
  • Karma: 15
    • Verze Delphi: D2007, XE3
Re:SQLite - zápis dátumu v Select
« Odpověď #20 kdy: 14-06-2016, 11:27:58 »
No pre mna je najviac zarazajuce ze bez ohladu na to co si clovek nadefinuje pri deklaracii stlpca, tak to ako sa dany udaj fyzicky ulozi sa vyhodnocuje pri kazdom jednom inserte alebo update osobitne. A nasledne ked si clovek selektne typeof(stlpec), tak kludne vidi ze v kazdom riadku toho isteho stlpca ma iny datovy typ  :o :o :o. To naozaj ako hovoris mali nechat len INT a TEXT a aspon mali osetrit aby sa do INTu nedal narvat text. SQLite ma byt naozaj lite nastroj na pracu s datami, kludne by to z mojho pohladu bol akceptovatelny koncept. Ale ulozit Mor Ho od Sama Chalupku do fieldu typu INTEGER bez akychkolvek protestov mi pride naozaj trosku pritiahnute za vlasy.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1834
  • Karma: 85
    • Verze Delphi: D2007, XE3, DX10
Re:SQLite - zápis dátumu v Select
« Odpověď #21 kdy: 14-06-2016, 12:36:02 »
No pre mna je najviac zarazajuce ze bez ohladu na to co si clovek nadefinuje pri deklaracii stlpca, tak to ako sa dany udaj fyzicky ulozi sa vyhodnocuje pri kazdom jednom inserte alebo update osobitne. A nasledne ked si clovek selektne typeof(stlpec), tak kludne vidi ze v kazdom riadku toho isteho stlpca ma iny datovy typ  :o :o :o. To naozaj ako hovoris mali nechat len INT a TEXT a aspon mali osetrit aby sa do INTu nedal narvat text. SQLite ma byt naozaj lite nastroj na pracu s datami, kludne by to z mojho pohladu bol akceptovatelny koncept. Ale ulozit Mor Ho od Sama Chalupku do fieldu typu INTEGER bez akychkolvek protestov mi pride naozaj trosku pritiahnute za vlasy.
Co na to rict? Snad jen, ze je treba precist dokumentaci, kterou ma Hwaci IMHO perfektni (a pripomenout, ze Sqlite vznikla k TCL a dostala za to tusim v roce 2005 cenu https://developers.google.com/open-source/osa/#2006-google-oreilly-open-source-award-winners):

Most SQL database engines use static typing. A datatype is associated with each column in a table and only values of that particular datatype are allowed to be stored in that column. SQLite relaxes this restriction by using manifest typing. In manifest typing, the datatype is a property of the value itself, not of the column in which the value is stored. SQLite thus allows the user to store any value of any datatype into any column regardless of the declared type of that column. (There are some exceptions to this rule: An INTEGER PRIMARY KEY column may only store integers. And SQLite attempts to coerce values into the declared datatype of the column when it can.)

As far as we can tell, the SQL language specification allows the use of manifest typing. Nevertheless, most other SQL database engines are statically typed and so some people feel that the use of manifest typing is a bug in SQLite. But the authors of SQLite feel very strongly that this is a feature. The use of manifest typing in SQLite is a deliberate design decision which has proven in practice to make SQLite more reliable and easier to use, especially when used in combination with dynamically typed programming languages such as Tcl and Python.

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 420
  • Karma: 15
    • Verze Delphi: D2007, XE3
Re:SQLite - zápis dátumu v Select
« Odpověď #22 kdy: 14-06-2016, 12:45:54 »
Nuz, co k tomu dodat, je to proste nasa oblubena SQLite ;). Vzdy sa najdu aplikacie pre ktore bude vhodna a pouzitelna, sam ju stale masivne pouzivam na logovania a ukladanie trendov a merani. Len treba mat na zreteli nejake zakladne zasady pri jej pouzivani.

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 277
  • Karma: 14
    • Verze Delphi: 10.2
Re:SQLite - zápis dátumu v Select
« Odpověď #23 kdy: 14-06-2016, 21:08:14 »
Ja som ho neopustil. Ale na takú mini aplikáciu je to zbytočne veľký moloch.
Radši bych k aplikaci nahrál Firebird embedded, než se pral kvůli troše ušetřeného místa s další databázi a řešil takováhle překvapení...

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2964
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:SQLite - zápis dátumu v Select
« Odpověď #24 kdy: 14-06-2016, 22:02:22 »
S tým už teraz celkom súhlasím ;)  Ale bol som aj zvedavý čo je to za čudo, keď ju tak odporúčajú :o  A ono to čudo je ;D
Teraz budem rozmýšľať či to nemám zmeniť! Access už z princípu vynechávam.
A je otázne čo prinesie budúcnosť.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online Delfin

  • Hrdina
  • ****
  • Příspěvků: 356
  • Karma: 15
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:SQLite - zápis dátumu v Select
« Odpověď #25 kdy: 22-06-2017, 22:57:41 »
Kazde DMBS ma sve vyuziti jinde. SQLite je napr. perfektni pro lokalni pouziti. Nicmene, Firebird bych nechal zemrit tak jak vznikl, to ze se ho nekdo snazit zastat je nejspis z archaickych duvodu. Ale k dotazu, to si nikdo nevsiml ze OP pouziva FireDAC? Ten je schopny konvertovat datove typy podle typu fyzickeho pripojeni. Staci pouzit parametry, tj. definovat dotaz jako:

Kód: MySQL [Vybrat]
  1. SELECT DISTINCT CLUB_MEMBER.DATEFROM, CLUB_MEMBER.DATETO
  2.   FROM CLUB_MEMBER
  3.   (:SomeDate BETWEEN CLUB_MEMBER.DATEFROM AND CLUB_MEMBER.DATETO) or
  4.   (CLUB_MEMBER.DATEFROM < :SomeDate and CLUB_MEMBER.DATETO is null)

A v kodu pouzit:

Kód: Delphi [Vybrat]
  1. FDQuery.ParamByName('SomeDate').AsDate := MyDate;

Pokud by bylo treba definovat konstantni hodnotu, staci (zase, pro vsechny podporovane DBMS) pouzit makro {d} ve formatu yyyy-mm-dd, napr. pro datum 21.1.2016:

Kód: MySQL [Vybrat]
  1. SELECT DISTINCT CLUB_MEMBER.DATEFROM, CLUB_MEMBER.DATETO
  2.   FROM CLUB_MEMBER
  3.   ({d 2016-01-21} BETWEEN CLUB_MEMBER.DATEFROM AND CLUB_MEMBER.DATETO) or
  4.   (CLUB_MEMBER.DATEFROM < {d 2016-01-21} and CLUB_MEMBER.DATETO is null)

Nebo trebas makro CONVERT, ale tohle je mnohem lepe citelnejsi.

Sorry za dalsi flame ;D
« Poslední změna: 22-06-2017, 23:06:08 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Online Delfin

  • Hrdina
  • ****
  • Příspěvků: 356
  • Karma: 15
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:SQLite - zápis dátumu v Select
« Odpověď #26 kdy: 22-06-2017, 23:32:13 »
Samozrejme ne jen FireDAC je schopen konvertovat datove typy za pouziti parametru. Nicmene ne jen kvuli tomu ty parametry dotazu existuji, parametry dotazu existuji take kvuli SQL injection a urychleni prenosu dat mezi klientem a serverem v pripade predpripraveneho SQL dotazu (dotaz se pripravi na strane serveru a pak se posilaji jen hodnoty parametru v pripade opakovaneho vyuziti dotazu). Neni treba hned nadavat na konkretni typ DBMS ;)
« Poslední změna: 22-06-2017, 23:37:53 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1834
  • Karma: 85
    • Verze Delphi: D2007, XE3, DX10
Re:SQLite - zápis dátumu v Select
« Odpověď #27 kdy: 23-06-2017, 09:43:29 »
Firebird bych nechal zemrit tak jak vznikl, to ze se ho nekdo snazit zastat je nejspis z archaickych duvodu.
Ze vsech moznejch i nemoznejch RDBMS se kterymi jsem musel delat bych FB preferoval pred parodii MySQL (s tou se nedalo delat skoro vubec, pokud clovek potrebovalref. integridu a evoluci schematu) a pred "sblitkem" MSSQL (s tou dokazu delat jen prostrednictvim EF)

Citace
Ale k dotazu, to si nikdo nevsiml ze OP pouziva FireDAC? Ten je schopny konvertovat datove typy podle typu fyzickeho pripojeni. Staci pouzit parametry, tj. definovat dotaz jako:
A to sis nevsiml, ze v odpovedi #6 dostal radu, ze ma pouzit parametry, ze to po roce vytahujes znovu na svetlo?

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2964
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:SQLite - zápis dátumu v Select
« Odpověď #28 kdy: 23-06-2017, 10:52:45 »
Hlavne, že som dal na radu vandrovnika a použil FB ;) 
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online Delfin

  • Hrdina
  • ****
  • Příspěvků: 356
  • Karma: 15
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:SQLite - zápis dátumu v Select
« Odpověď #29 kdy: 23-06-2017, 17:36:04 »
Firebird bych nechal zemrit tak jak vznikl, to ze se ho nekdo snazit zastat je nejspis z archaickych duvodu.
Ze vsech moznejch i nemoznejch RDBMS se kterymi jsem musel delat bych FB preferoval pred parodii MySQL (s tou se nedalo delat skoro vubec, pokud clovek potrebovalref. integridu a evoluci schematu) a pred "sblitkem" MSSQL (s tou dokazu delat jen prostrednictvim EF)

Citace
Ale k dotazu, to si nikdo nevsiml ze OP pouziva FireDAC? Ten je schopny konvertovat datove typy podle typu fyzickeho pripojeni. Staci pouzit parametry, tj. definovat dotaz jako:
A to sis nevsiml, ze v odpovedi #6 dostal radu, ze ma pouzit parametry, ze to po roce vytahujes znovu na svetlo?

Nevsiml, sorry potom :-X

No MySQL je taky nadeleni. Kdybych si mohl vybrat free reseni pro stredne velke skladiste dat, vybral bych si PostgreSQL. Vyvoj se zda byt bran vazne, coz mi u FB nepripada moc slavne (to snad uz Interbase, kde se EMBT tvari ze neco vyrabi).
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

 

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í:
Křestní jméno zpěváka Gotta: