Autor Téma: SQLite a dátumy v tvare DateTime (FireDAC)  (Přečteno 1421 krát)

Offline miroB

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 14
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
SQLite a dátumy v tvare DateTime (FireDAC)
« kdy: 13-12-2017, 01:24:29 »
Excellent
Rated 1 time
V prípade dátumov typu DATETIME v SQLite+FireDAC, nastane menší problém pri použití takéhoto typu vo výraze.
(Ako reakcia na príspevky Stano Hruška a Delfin. Odkazy viď dolu.)
Majme tabuľku:
Kód: MySQL [Vybrat]
  1. CREATE TABLE if not exists [demo] ( Datum DateTime );
  2. INSERT INTO [demo] ( Datum ) VALUES ( GETDATE() );
Stĺpec definovaný v tabuľke ako DATETIME je v rámci SELECT prezentovaný očakávane. Prejaví sa správne aj vo výpise v dbGrid.
Akonáhle sa ale jedná o výraz, stratí sa informácia o rozšírenom type DATETIME
Miesto toho je typ zmenený na REAL/FLOAT. Teda na jeden zo základných typov SQLite.
Nie je možné použiť ani Accessor AsDateTime. Treba použiť Accessor Value, alebo AsFloat. Takto získanú hodnotu je ale možné rovno priradiť do premennej typu DateTime. K tomuto tvrdeniu viď príklad.
Kód: MySQL [Vybrat]
  1. SELECT Datum, Datum + 1 AS Zajtra FROM [demo]
Napríklad MS Access pre výraz Datum + 1 vráti samozrejme rovno správny typ dátum..
Podobne, keď sa vyrobí užívateľská funkcia, ktorá má vrátiť výsledok typu DateTime, pre SQLite vráti iba typ REAL.
Funkcia v SQLite nie je schopná vrátiť iný typ, než základný typ.
Preto nemá význam ani:
Kód: MySQL [Vybrat]
  1. CAST( Datum + 1 AS DATE )
Pre prípadné ďalsie uživateľské funkcie, ktoré by boli závislé na vstupe typu DATETIME alebo REAL (overload), teda nie je šanca.
Vyššie uvedené fakty sa samozrejme premietnu aj do výpisu v dbgride, kde výrazy nad typom dátum už nie sú dátum, ale float.
Ale to všetko sa dá obísť. Napríklad takto:
Kód: MySQL [Vybrat]
  1. Datum + 1 AS [xy::DATETIME]
Negatívom tohoto riešenia je, že TypeCast sa síce vykoná správne, ale pole sa nevolá xy, ako by sa dalo čakať, ale takto: 'xy::DATETIME' !!!
Takže sme vlastne stratili možnosť použitia nejakého prijateľného aliasu pre stĺpec.
Ešte horšie je, že Delphi sa interne tvári, že názov stĺpca je xy, rovnako aj vo výpise v dbGrid. Lenže interne je stĺpec označený aj s dvojbodkou a typom. Takže prípadný ďalší SELECT musí obsahovať komplet názov.

Pozitívne je, že všetky operácie nad dátumom, či double sa samozrejme stále vykonávajú správne.
Pretože DATETIME je skutočne double. Len chýba tá rozšírená info, pre výpisy a prípadné funkcie.
Tie "drobné" úpravy zostávajú teda na užívateľovi.

Teoretickým východiskom pre výpis do dbGrid, je napríklad vytvorenie dočasnej tabuľky so štruktúrou, kde sa vhodne nahradí REAL za DATETIME. Keď sa do takejto tabuľky nasype výsledok výrazu s dátumom v rámci SELECT, tak potom pri SELECT-e z tejto tabuľky bude zobrazenie dátumov v poriadku.

Dátum v tvare DATETIME je kompatibilný s MS Access, Delphi a s Excelom, resp. aj s Variant typu varDate.

Tento príspevok je reakciou na :
.. SQLite som raz skúšal, ale veľmi rýchlo som pohorel na dátumoch. Nestojí mi to zato. ..
a na:
Stano, myslim, ze datumy v SQLite nie su az taky problem.
Staci prepnut v Connection na datum typu DateTime a si ako v Delphi.

O zadnem problemu s datumy nevim. Co nastavujes v connection definition parametru DateTimeFormat je jen zpusob jakym se budou data do databaze ukladat. Accessorem AsDate(Time) zapisujes do parametru a ctes z poli Delphi typ TDate(Time) a je jedno jak jsou data o vrstvu niz ulozena. Kdyztak ho zkuste popsat v samostatnem vlakne nebo poslete odkaz na existujici... ;)

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 432
  • Karma: 17
    • Verze Delphi: D2007, XE3
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #1 kdy: 15-12-2017, 17:02:32 »
toto vlakno si uz asi videl: http://forum.delphi.cz/index.php/topic,15289.0.html

ja som v sqlite s datumami pracoval vzdy vo formate unixoveho casu, cize cele cislo vyjadrujuce pocet sekund od tusim 1970 ci tak nejako. Jednoznacne roky som takto v sqvlite pracoval a vyuzival som potom tieto integrovane funkcie sqlitu: https://sqlite.org/lang_datefunc.html. Je to mierne prace navyse, ale mal som to ciste a rychle... Sqlite nie je moc na pracu s datumami to prave orechove a ako som cital tvoj prispevok tak aj aj kadejake kaskaderske kusky FireDACu ktore by mohli pomoct asi nikdy nebudu stopercentne... Isiel by som od toho, zamotas sa.

Offline miroB

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 14
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #2 kdy: 15-12-2017, 17:59:04 »
Dík, chápem. Aj ja mám trochu obavu, ale verím, že to zvládnem.
Zatiaľ som nenarazil na zásadný problém. Vŕtam sa v tom už dlho.
Príspevky o SQLite na tomto fóre snáď poznám už naspamäť.
Link v tvojom odkaze poznám veľmi dobre.
toto vlakno si uz asi videl: http://forum.delphi.cz/index.php/topic,15289.0.html
Zdá sa mi však, že ide mimo záujmov, ktoré sledujem, pretože každý tu doteraz riešil nejakú verziu dátumov, okrem tej, ktorá je pre mňa zásadná. To je tvar DATETIME, teda vlastne DOUBLE.
Predpokladám, že je známe, ako krásne funguje:
Celé číslo je počet dní od 1.1. 1900 a každý ďalší deň je teda + 1.
Na to ani nie je treba funkcie. Snáď jedna jediná je dôležitá DateSerial( rok, mesiac, deň). Pričom je treba, aby mesiace a dni nemali limity. Takže DateSerial(2017,0,1), je napríklad 1.12.2016
Tak to funguje aj v Excel/Access.
Samozrejme funkcie Today a Now. No a matematický TRUNC, aby sa dal čas (TIME) odtrhnúť od DATETIME.
Čas je tiež geniálny, napríklad 0.5 znamená 12:00:00. Keď sa dosiahne jedna celá, je to už vlastne nový deň a čas začína prvou sekundou nového dňa:  =1/24/60/60
potom už len zostáva funkcia Format, ktorá má podobné vlastnosti, ako FormatFloat v Delphi.
  • Tvar TDATETIME našťastie veľmi dobre poznám.
  • Neočakávam problémy, pretože v zásade vôbec nevadí, že SQLite ich uchováva ako double
  • Je to vlastne double a matematika s dátumom a časom je geniálne jednoduchá
  • Počítam s vlastnými funkciami pre dátumy. Ale nie je ich treba veľa. Už 5 je tu veľké číslo
  • Potrebujem kompatibilitu s Excelom a Accessom. Tá s OLE a Delphi, nie je na škodu
  • Tiež potrebujem výraznú jednoduchosť.
  • Požiadavka na jednoduchosť tu možno mnohých zarazí, lebo databázy používate na riešenie globálnych úloh
  • Moje riešenia sú skôr pre začiatočníkov. Nejaké strftime s jej obrovským rozsahom, či zložité výpočty, by ich prizabili.
Ak by si mal ešte niečo na mysli, čo mi evidentne uniká, prosím povedz mi to presnejšie.
Ďakujem,
Miro
« Poslední změna: 15-12-2017, 18:02:32 od mibainfo »

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 432
  • Karma: 17
    • Verze Delphi: D2007, XE3
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #3 kdy: 21-12-2017, 20:24:11 »
No ono uznavam ze pouzit format identicky s TDateTime usetri robotu a je to najprijemnejsie. Pracuje sa s nim pohodlne a vela funkcii naozaj netreba.

Ale bol by som opatrny s vyjadreniami ze matematika s takymto datumom je genialne jednoducha. To sa naozaj k strojovej matematike s realnymi cislami moc tvrdit nema. Mnozstvo problemov s presnostou, zaokruhlovanim a porovnavanim realnych cisiel je velmi dobre zname. Cize cislo 0.5 je z tohto pohladu 12:00:00.000 a cislo 0.500000001 je z pohladu ludskeho vnimania casu stale na milisekundu presnych 12:00:00.000. Ale s pohladu mikro alebo nanosekund to uz rovnaky cas nie je. A ak pouzijes nevhodne porovnanvacie funkcie tak na teba vypluvnu ze tieto datumi nie su rovnake, napriek tomu ze sa javia byt uplne rovnake. Vykon prace s realnymi cislami je tiez niekde uplne inde. Cize vyhodou unixackeho celociselneho "sekundoveho" casu je rychlost a jednoznacnost. Ale nevyhodou je ze nie je mozne jednoduchym sposobom pracovat s presnestou vacsou ako na sekundy. Ale to vacsinou vobec nevadi a vdaka tomu komparacie a triedenie je ovela rychlejsie bez rizika anomalii z oboru realnych cisel. Nastastie datovy typ double je dostatocne presny na potreby prace s casom. Ale ja uz som na problemy so zoukruhovanim a pripocitavanim "neviditelnych" fragmentov casu narazil a zrazu mi lietali hore dole sekundy a ja som nechapal ze preco.

Ako druhy potencionaly problem vidim v samotnej benevolentnosti SQLitu k datovym typom. Darmo ze ty mas navoleny stlpec typu real. Moze sa stat ze na jednom pocitaci budes zapisovat realne cisla s ciarkou na druhom s bodkou a problem bude na svete. Pokial sqlite pozna ze je to realne cislo tak ho tak aj ulozi, akonahle ho nepozna ulozi ho ako TEXT. To zatial nebude velky problem pokial budes s tym stale pracovat na rovnakom pc s rovnakym nastavenim narodneho prostredia. SQLite tie konverzie urobi a bude to fungovat. Ale potom sa moze stat ze prejdes z anglickeho windowsu na slovensky alebo naopak a mohla by ti vyletiet chyba ze hodnota v danom stlpci nie je hodnota REAL ale TEXT ktory on nevie previest na double cislo. Da sa to osetrit aby sa to nestalo, ale treba na to mysliet.

Takze chcel si pocut ci mozu existovat nejake zadrhele ak v databazach pouzivas typ real na ukladanie casu. Tak ako vidis hlavne v pripade sqlitu mozu. Pretom som radsej pouzival unixacky celociselny cas. Myslim ze ani viacere velke databazy nepouzivaju realne cislo na uchovavanie datumu a casu. Ale nebudem sa hadat, nie som zrovna najsilnejsi v databazach.
« Poslední změna: 21-12-2017, 20:26:03 od Daniel_Andrascik »

Offline miroB

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 14
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #4 kdy: 22-12-2017, 16:09:07 »
Mas pravdu, s realnymi cislami je potencialny problem a nie jeden.
V tomto prostredi budem musiet mozno spravit funkciu na porovnanie celociselnych datumov, bez time, aby bola istota. A nielen tu. Cisla s bodkou a ciarkou o tom viem.
Budem to musiet este cele preskumat.
Dufam, ze sa bude dat spolahnut na deklaraciu typov v tabulke, takze tie cisla, ak bude problem osetrim.
Dakujem za namety.

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 432
  • Karma: 17
    • Verze Delphi: D2007, XE3
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #5 kdy: 22-12-2017, 18:07:39 »
Dufam, ze sa bude dat spolahnut na deklaraciu typov v tabulke...

No praveze v pripade sqlitu sa na urovni db na toto vobec nemozes spolahnut vid. to vlakno na ktore som ti poslal odkaz v uvode. Ale mozno ze firedac bude mat dostatocny osetrovaci mechanizmus, to som uz hlbsie nestudoval. Mam kamarata, ktory robil registracnu pokladnu v delphi s vyuzitim sqlite ktora nakoniec uspesne presla aj certifikaciou. A on tiez jednoznacne na kazdy zaznam casu a datumu o kazdej platbe pouzival unix timestamp.

Offline miroB

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 14
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #6 kdy: 23-12-2017, 12:58:47 »
Najviac ma vystrasila moznost, ze by o type text/cislo rozhodovala desatinna ciarka/bodka. Teda nieco, co sa potencialne deje v CSV/Text.
Chce sa mi verit, ze SQLite aspon uchova informaciu, ci stlpec v ramci tabulky bol povodne definovany ako Text, alebo ako Cislo. Bez ohladu na prostredie.
- Pokladnicnehy SW, mozet byt uzavrety system, so svojim vlastnym virtualnym svetom. Ma napriklad zarucene, ze datumy nebudu pred rokom povedzme 1970. Ze sekunda dve su dostatocna rozlisovacka. Da sa tiez ocakavat konecny pocet potrebnych ukonov. V obecnom pripade, to moze byt zlozitejsie.
- A ako napr. vysvetlujes, ze Access, SQL Server a Excel maju kompatibilny system datumov. Zalozeny na datetime?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3520
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #7 kdy: 23-12-2017, 13:36:26 »
Citace
A ako napr. vysvetlujes, ze Access, SQL Server a Excel maju kompatibilny system datumov. Zalozeny na datetime
Ja nijako :) 
Ale jeho zobrazovanie a ďalšia práca s ním úzko súvisí s nastavením národného prostredia OS. V minulosti mi to dalo zabrať, kým som pochopil o čo ide. Pri desatinných číslach som si musel vytvoriť funkciu na zámenu desatinnej čiarky a bodky. Nehovoriac o tom, že Access používa rozličný syntax pre vizuálne a SQL (VBA) prostredie. Ale to určite vieš.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 432
  • Karma: 17
    • Verze Delphi: D2007, XE3
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #8 kdy: 23-12-2017, 14:30:52 »
- A ako napr. vysvetlujes, ze Access, SQL Server a Excel maju kompatibilny system datumov. Zalozeny na datetime?

Excel je krasny priklad problemov s datumami. Ty si ich v exceli este nemal? Otvoril som excelsheet od francuza ktory mi dosiel emailom a ejha, niektore datumy boli zapisane ako text v kadejakych formatoch a ine ako ozajstne datumy s ktorimy sa dalo pocitat. Proste ten sheet preletel emailami francuzko, slovensko a madarsko a kazdy si tam zapisal datumy podla svojho narodneho prostredia a problem bol na svete.

U serioznych RDBMS s tym anozaj zavazne problemy mat nebudes. Pretoze tam ked vytvoris stlpec typu real tak mas istotu ze dovntura vlozis len real cislo v binarnej podobe. Moze sa stat ze pri INSERTovani zaznamu narazis na problem ze vkladas cislo s ciarkou, ale db ocakava cislo s bodkou a podobne a ti to neprejde, ale to sa da v zakladoch dost dobre osetrit pouzitim spravnych formatovacich funkcii zohladnujucich narodne prostredie. A potom budes mat istotu ze hodnota ulozena v tom tvojom stlpci je vyzdy realne cislo ulozene v binarnom formate a tym padom ti databaza moze obletiet cely svet a vsetky hodnoty budu stale binarne ulozene realne cislo. Ale u sqlitu tu istotu proste nemas, sqlite zhltne do stlpca typu real hocico. Kludne tam ulozis aj html zdroj tohto vlakna.


Offline miroB

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 14
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #9 kdy: 23-12-2017, 14:37:05 »
Citace
A ako napr. vysvetlujes, ze Access, SQL Server a Excel maju kompatibilny system datumov. Zalozeny na datetime
Ja nijako :) 
Ale jeho zobrazovanie a ďalšia práca s ním úzko súvisí s nastavením národného prostredia OS. V minulosti mi to dalo zabrať, kým som pochopil o čo ide. Pri desatinných číslach som si musel vytvoriť funkciu na zámenu desatinnej čiarky a bodky. Nehovoriac o tom, že Access používa rozličný syntax pre vizuálne a SQL (VBA) prostredie. Ale to určite vieš.
Access sa pre SQL da nastavit. V SQL je %, v access je to *. V nastaveniach to ide zmenit. Tusim tam je nejaky priznak typu SQL 92 kompatibilita. Samotna access engina, apriori vyuziva klasicky SQL pristup.
V Access som nepostrehol, ze by datumy boli zatazovane problemom desatinna ciarka.
Samozrejme export import cez CSV/Text tam ano. Specialne je vyuzivanie udajov z webu, kde sa pri transferoch menia nielen bodky, ale aj typy uvodzoviek, co je specialna zrada.
V binarnych xls, xlsx/xml, ci mdb/accdb som problem ciarka/bodka nezazil nikdy.
Jedine, co som s Accessom ohladne datumov specialne robil, bol prevod DateTime na Date.
Datum casto staci pre rozne prehlady a analyzy, cas je vtedy na obtiaz. Desatinne miesta (cas), vsak treba odtrhnut, nikdy nie zaokruhlit.
Existuje nekompatibilita datumov u Access vs Excel, ale iba "par dni" po roku 1900, pretoze tabulkove kalkulatory historicky preberaju chybu VisiCalcu, ktory nerespektoval nejaky prestupny rok v danom obdobi.

Offline miroB

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 14
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #10 kdy: 23-12-2017, 14:48:43 »
- A ako napr. vysvetlujes, ze Access, SQL Server a Excel maju kompatibilny system datumov. Zalozeny na datetime?

Excel je krasny priklad problemov s datumami. Ty si ich v exceli este nemal? Otvoril som excelsheet od francuza ktory mi dosiel emailom a ejha, niektore datumy boli zapisane ako text v kadejakych formatoch a ine ako ozajstne datumy s ktorimy sa dalo pocitat. Proste ten sheet preletel emailami francuzko, slovensko a madarsko a kazdy si tam zapisal datumy podla svojho narodneho prostredia a problem bol na svete.
Velmi podobny problem vznikal aj uzivatelom IB u jednej z najvacsich, bank na Slovensku. Islo vsak o "CSV". Nejaky tiezodbornik tam vyrobil export do textaku, kde pouzival ciarku pre desatinne miesta a aj ako odelovac poli. Excel vyrobil z toho chaos. No a potom sa problem uz len nabaluje. Chyba bola na zaciatku u prveho konzumenta nejakeho importu. Chyba na strane Excelu bola iba v tom, ze take nieco sa snazil za kazdu cenu prevziat a interpretovat, nez by zahlasil, ze ten vstup je totalna blbost.
Roky som to reklamoval a nic. Dost by ma zaujimalo, kolkym ludom, nejaky lajdak zobral desiatky hodin zivota beztrestne.
Inak ked "odbornik" vyrobi ozaj zakernu chybu, tak ziadny SW to nezachrani.
Ale nikto z nas nezabrani aby sa v Exceli v obrovskom mnozstve nespracovavali kvanta udajov. Vratane pocitacovyvh firiem. Je to proste lacne a jednoduche.  Tomu sa len tazko da odolavat. Nepaci sa mi to. Ale je to fakt.
« Poslední změna: 23-12-2017, 15:13:40 od mibainfo »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2271
  • Karma: 123
    • Verze Delphi: D2007, XE3, DX10
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #11 kdy: 23-12-2017, 15:30:09 »
Chce sa mi verit, ze SQLite aspon uchova informaciu, ci stlpec v ramci tabulky bol povodne definovany ako Text, alebo ako Cislo. Bez ohladu na prostredie.
No neni zrovna dobry pristup k pouziti SQLite :-)

Ja bych ti doporucoval jit na stranku http://sqlite.org/different.html a tam ci cist tak dlouho odstavec Manifest typing, nez pochopis, co to prakticky znamena.
SQLite sama si uchova CREATE TABLE xxx jako text tak na ten text se lze take dotazat.

Potud je chovani SQLite kristalove ciste a s prihlednutim velmi kvalitni dokumentace snadno uchopitelne.

Ovsem problemy do toho zanaseji ruzne konektivity, ktere pouzivaji spise nezkokumentovanou nez zdokumentovanou lidovou tvorivost, jak se s tim manifest typingem vyporadavaji.
Osobne ti v tom neporadim, protoze jsem si k verzi SQLite 2.8 napsal pro Delphi vlastni connectivitu a cela leti ji pouzival. S tou jsem pochopitelne nemel zadne problemy a konkretne s TDateTime to pracovalo jako se stringem podle ISO 8601.

« Poslední změna: 23-12-2017, 15:34:28 od pf1957 »

Offline miroB

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 14
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SQLite a dátumy v tvare DateTime (FireDAC)
« Odpověď #12 kdy: 23-12-2017, 15:46:04 »
Chce sa mi verit, ze SQLite aspon uchova informaciu, ci stlpec v ramci tabulky bol povodne definovany ako Text, alebo ako Cislo. Bez ohladu na prostredie.
No neni zrovna dobry pristup k pouziti SQLite :-)

Ja bych ti doporucoval jit na stranku http://sqlite.org/different.html a tam ci cist tak dlouho odstavec Manifest typing, nez pochopis, co to prakticky znamena.
SQLite sama si uchova CREATE TABLE xxx jako text tak na ten text se lze take dotazat.

Potud je chovani SQLite kristalove ciste a s prihlednutim velmi kvalitni dokumentace snadno uchopitelne.
S nastrahami SQLite som predbezne uzrozumeny. Je fakt, ze FireDAC poskytuje nejake jemne moznosti navyse. Pridam este nejake vlastne drobne vylepsenia, v ramci analyzy syntaxe. Uvidime, ako to dopadne:)

 

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: