Autor Téma: Datum a čas z MySQL na TDateTime  (Přečteno 5516 krát)

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Datum a čas z MySQL na TDateTime
« kdy: 30-07-2014, 11:12:05 »
Ahoj,

potřebuji datum a čas ve tvaru "2014-04-25 13:59:28" převést na TDateTime. Zkoušel jsem použít:
Kód: [Vybrat]
TFormatSettings fs;
TDateTime dt;

GetLocaleFormatSettings(GetUserDefaultLCID(), fs);
fs.DateSeparator = '-';
dt = StrToDateTime(UnicodeString(radek[0]), fs);  //radek[0] obsahuje datum a cas prijaty z DB

Při volání StrToDateTime obdržím vyjímku EConvertError s infirmací, že "2014-04-25 13:59:28" není platné datum a čas. C++ Builder XE5.

hu

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1250
  • Karma: 28
    • Pepak.net
Re:Datum a čas z MySQL na TDateTime
« Odpověď #1 kdy: 30-07-2014, 11:15:39 »
Ne že by nešlo zkonstruovat formát datumu tak, aby ti to StrToDateTime zvládl, ale já osobně se tedy radši držím starého dobrého "rozdělit string na jednotlivé komponenty, ty pomocí StrToInt převést na číslo a následně je pospojovat do TDateTime pomocí EncodeDate+EncodeTime".

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #2 kdy: 30-07-2014, 11:42:45 »
Zdrojový řetězec je *char, realizace tvého postupu vypadá takto:
Kód: [Vybrat]
sscanf(radek[0], "%d%*c%d%*c%d%*c%d%*c%d%*c%d", &rok, &mes, &den, &hod, &min, &sek);
dt = TDateTime(rok, mes, den, hod, min, sek, 0);

Děkuji za pomoc.

hu

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 558
  • Karma: 23
Re:Datum a čas z MySQL na TDateTime
« Odpověď #3 kdy: 30-07-2014, 17:55:26 »
Ne že by nešlo zkonstruovat formát datumu tak, aby ti to StrToDateTime zvládl, ale já osobně se tedy radši držím starého dobrého "rozdělit string na jednotlivé komponenty, ty pomocí StrToInt převést na číslo a následně je pospojovat do TDateTime pomocí EncodeDate+EncodeTime".

Já radši použiji něco na konverzi, kam jde zadat i ten formát dat. Ale jestli to leze z db, tak by to snad mělo vracet rovnou v odpovídajícím typu a ne ve stringu...

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1250
  • Karma: 28
    • Pepak.net
Re:Datum a čas z MySQL na TDateTime
« Odpověď #4 kdy: 30-07-2014, 18:04:57 »
Ale jestli to leze z db, tak by to snad mělo vracet rovnou v odpovídajícím typu a ne ve stringu...
Vždyť píše, že to neleze z databáze, ale z MySQL...

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #5 kdy: 30-07-2014, 18:17:31 »
Používám C API MySQL. Viz http://programujte.com/clanek/2009052300-zakladni-implementace-mysql-v-c-c/

hu

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #6 kdy: 30-07-2014, 18:54:32 »
pepak: MySQL není databáze? :o

hu

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1626
  • Karma: 67
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (teď XE8 a XE10)
    • O Delphi v češtině
Re:Datum a čas z MySQL na TDateTime
« Odpověď #7 kdy: 30-07-2014, 19:58:52 »
pepak: MySQL není databáze? :o

hu

Já bych do toho zda MySQL je nebo není opravdová DB moc nerýpal, nebo se ještě něco dozvíš :-)
Embarcadero MVP - Czech republic

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 558
  • Karma: 23
Re:Datum a čas z MySQL na TDateTime
« Odpověď #8 kdy: 30-07-2014, 19:59:57 »
Používám C API MySQL. Viz http://programujte.com/clanek/2009052300-zakladni-implementace-mysql-v-c-c/

hu

k čemu je dobré používat takové low-level přístupy? Použil bych něco modernějšího.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 558
  • Karma: 23
Re:Datum a čas z MySQL na TDateTime
« Odpověď #9 kdy: 30-07-2014, 20:00:26 »
pepak: MySQL není databáze? :o

ne, to je jenom Parodie :-)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1679
  • Karma: 70
    • Verze Delphi: D2007, XE3, DX10
Re:Datum a čas z MySQL na TDateTime
« Odpověď #10 kdy: 30-07-2014, 20:19:05 »
pepak: MySQL není databáze? :o
ne, to je jenom Parodie :-)
Ja bych to tak prikre nevidel: pote, co do InnoDB dolepili referencni intergritu se to IMHO jako databaze dalo pouzit. Jedine, kde jsem narazil, bylo tusim dostat se ke constraintum v systemovych tabulkach apod. aby se daly evoluovat. Ovsem to byla nejaka verze 4.x, od te doby jsem to nevidel.

Ovsem je otazka, jestli dneska platit za neco takoveho, kdyz existuji lepsi RDBMS a zadarmo

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1679
  • Karma: 70
    • Verze Delphi: D2007, XE3, DX10
Re:Datum a čas z MySQL na TDateTime
« Odpověď #11 kdy: 30-07-2014, 20:20:14 »
Používám C API MySQL. Viz http://programujte.com/clanek/2009052300-zakladni-implementace-mysql-v-c-c/
k čemu je dobré používat takové low-level přístupy? Použil bych něco modernějšího.
Jine pristupy nejak nerozdejchal

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #12 kdy: 30-07-2014, 21:48:03 »
Používám C API MySQL. Viz http://programujte.com/clanek/2009052300-zakladni-implementace-mysql-v-c-c/
k čemu je dobré používat takové low-level přístupy? Použil bych něco modernějšího.
Jine pristupy nejak nerozdejchal

Spíš nerozchodil.

Čo je to také "lepsi RDBMS"?

hu
« Poslední změna: 30-07-2014, 21:50:17 od hlucheucho »

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 558
  • Karma: 23
Re:Datum a čas z MySQL na TDateTime
« Odpověď #13 kdy: 31-07-2014, 13:00:47 »
Spíš nerozchodil.

Čo je to také "lepsi RDBMS"?

hu

Já jich tam moc nepoužíval, dělal jsem většinou na MSSQL a to má alespoň celkem dobré nástroje. Oracle má takové featury, že té bych se radši vyhnul. Jinak mi přišlo, že dost lidí používá třeba Firebird nebo Postrgresql, ale nepoužíval jsem je.

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #14 kdy: 31-07-2014, 13:31:41 »
Nemyslím si, že by změna DB přinesla něco pozitivního, takže nebudu plýtvat časem a úsilím.

hu

RomanZ

  • Host
Re:Datum a čas z MySQL na TDateTime
« Odpověď #15 kdy: 01-08-2014, 09:23:02 »
Kdybyste se příště rozhodovali, co použít za DB, mohu doporučit:

MS SQL Server Express edition
http://www.microsoft.com/en-us/server-cloud/products/sql-server-editions/sql-server-express.aspx

Oracle Database 11g Express Edition
http://www.oracle.com/technetwork/database/database-technologies/express-edition/overview/index.html

Express edice jsou zdarma pro všechny účely a jejich omezení přibližně jsou: pojme 10/11GB dat, využívá max 1GB paměti a 1 CPU.
Co považuju za výhodu Express edicí: bohatě stačí pro vývoj a pro provoz u menších zákazníků, jsou zdarma, a hlavně jsou plně kompatibilní s vyššími edicemi. Tedy vyvinu zdarma, používám zdarma, a teprve když je zákazník veliký a DB přestane stačit, tak si koupí placenou verzi - kvůli tomu už ale nemusím na kód sáhnout, verze DB jsou komaptibilní.

Co považuju za nevýhodu MS a Oracle: Ani MS, ani Oracle nemají embedded verzi, která by byla plně kompatibilní s těmi serverovými. Prostě nejde napsat jeden program tak, aby mu bylo jedno, jestli jede proti embedded a nebo serverové DB. Což je škoda a není to nemožné, myslím že třeba Firebird to umí.

Takže kdybych potřeboval psát aplikaci proti serveru, sáhnul bych po MS SQL nebo Oracle. Přechod na výkonnější systém je už pak v režii zákazníka a nemám s tím práci.
Kdybych potřeboval psát aplikaci proti embedded nebo serverové DB, sáhnul bych asi po Firebirdu. Ale naposled jsem ho použil před mnoha lety, nevím jak na tom je dnes.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1250
  • Karma: 28
    • Pepak.net
Re:Datum a čas z MySQL na TDateTime
« Odpověď #16 kdy: 01-08-2014, 10:45:16 »
Mě na obou těchto databázích vždycky vadila složitá instalace a velké nároky na systémové zdroje i v případě, že žádnou DB zrovna aktivně nepoužívám, jen visí v pozadí.

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #17 kdy: 01-08-2014, 11:38:30 »
Mě na obou těchto databázích vždycky vadila složitá instalace a velké nároky na systémové zdroje i v případě, že žádnou DB zrovna aktivně nepoužívám, jen visí v pozadí.

Chybí mi u toho kterou DB doporučuješ.  :)

hu

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1250
  • Karma: 28
    • Pepak.net
Re:Datum a čas z MySQL na TDateTime
« Odpověď #18 kdy: 01-08-2014, 11:45:38 »
Firebird, PostgreSQL.

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #19 kdy: 01-08-2014, 14:07:45 »
Když se podívám na stránky FireBirdu, nabízí omezenou konektivitu, C a C++ mezi nimi není. U MS SQL jsem tyto informace nenašel. Takže hromada hledání, bádání a vynaloženého úsilí s nejistým výsledkem.

hu

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1250
  • Karma: 28
    • Pepak.net
Re:Datum a čas z MySQL na TDateTime
« Odpověď #20 kdy: 01-08-2014, 14:45:26 »
Měl jsem za to, že používáš Cčko od Embarcadera. V něm nemáš komponenty pro Interbase? FB je s ní z větší části kompatibilní.

Plus tedy moje instalačka Firebirdu má přímo v sobě .lib a .h pro Borlandí i Microsoftí C.

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #21 kdy: 01-08-2014, 15:47:01 »
a opět komponenty, kde přístup ke vzdálené DB by stál nehorázný peníze. Zatím používám C++ Builder. Co budu dělat pod Linuxem? V tu chvíli mi WinAPI, VCL a C++ Builder budou na nic. Budu potřebovat C/C++ konektivitu použitelnou i s jiným vývojovým prostředím a frameworkem. Vypadá to, že MySQL s jejím C API bude použitelná i v této situaci.

hu

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1250
  • Karma: 28
    • Pepak.net
Re:Datum a čas z MySQL na TDateTime
« Odpověď #22 kdy: 01-08-2014, 16:29:27 »
Sorry, ale připadá mi, že plácáš totální nesmysly. FB je open source v Cčku, podporován je bez problémů i Linux, ale ty tu pořád meleš o "nedostupnosti C konektivity". Skoro mám pocit, že potřebuješ speciální download "C driver for Firebird", aniž bys zohledňoval, že nic takového neexistuje, protože to je přímo součástí nejen zdrojáků té databáze, ale dokonce i binárek. Ale pro mě za mě, bojuj si svůj boj za standalone ovladač, když tě to baví...

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #23 kdy: 01-08-2014, 17:37:08 »
Tohle jsem se měl dozvědět z jejich webu. V sekci Connectivity prezentují Javu, .net, Python a trochu méně nápadně ODBC.
A přijít na to, že Interbase API, které zmiňují mezi manuály kdesi dole, je ve skutečnosti Firebird API, to chce kus jasnovidectví. U MySQL mi nedělalo problémy najít dokumentaci. Z toho vyplývá jediné: potenciální uživatel musí informace složitě "dolovat" místo aby je našel jasně uspořádané a na pár prokliků se dozvěděl, co potřebuje - to diskvalifikuje sebelepší aplikaci.

hu

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 392
  • Karma: 15
    • Verze Delphi: D2007, XE3
Re:Datum a čas z MySQL na TDateTime
« Odpověď #24 kdy: 01-08-2014, 19:46:30 »
tiez som sa dost zaoberal na ktoru DB zamerat svoju pozornost. Nejake lahke apky som uz urobil oproti MySQL. Ale jednalo sa len o priamocare vyuzivanie DB s velmi jednoduchymi vztahmi. Hladal som alternativu a tiez sa zacinam priklanat ku PostgreSQL a pripadne ku MSSQL. U firebirdu mi tiez vadi problematicka dokumentacia. U MSSQL mi zase vadi jej obrovsky objem ale mam zopar zakaznikov ktory ju pouzivaju a v poslednych ediciach vznikla uz akceptovatelna verzia LocalDB pre lokalny vyvoj ktora zabere len 140MB ci tak nejako a funguje i v malej sieti a co do moznosti je takmer identicka ako Expres edicia, cize v pripade potreby by nemal byt problem preklopit na vyssiu, pripadne platenu ediciu. Ale i tak by som asi uprednostnil PostgreSQL, respektive zvazujem pouzitie ORM systemu ktory zvladne obidve DB

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1679
  • Karma: 70
    • Verze Delphi: D2007, XE3, DX10
Re:Datum a čas z MySQL na TDateTime
« Odpověď #25 kdy: 01-08-2014, 20:10:15 »
Takže kdybych potřeboval psát aplikaci proti serveru, sáhnul bych po MS SQL nebo Oracle. Přechod na výkonnější systém je už pak v režii zákazníka a nemám s tím práci.
K tomu bych jen doplnil:
1) MSSQL neni multiplatformni, takze ta skalovatelnost neni ciste v rezii zakaznika a na silnejsi zelezo to nedostane.
2) IBM dela taky express edici DB2 a DB2 je plne skalovatelna na ruzne zelezo
3) pokud nepotrebuju embedded verzi, sahnul bych po Postgre, ktera patri take mezi dospele RDBMS a je plne skalovatelna na ruzne zelezo

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1679
  • Karma: 70
    • Verze Delphi: D2007, XE3, DX10
Re:Datum a čas z MySQL na TDateTime
« Odpověď #26 kdy: 01-08-2014, 20:12:13 »
jediné: potenciální uživatel musí informace složitě "dolovat" místo aby je našel jasně uspořádané a na pár prokliků se dozvěděl, co potřebuje - to diskvalifikuje sebelepší aplikaci.
Tak doufam, ze ses proklikal i k licenci MySQL a precetl sii, ze je kompatibilni s tim, na co ji chces pouzit ;-)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1679
  • Karma: 70
    • Verze Delphi: D2007, XE3, DX10
Re:Datum a čas z MySQL na TDateTime
« Odpověď #27 kdy: 01-08-2014, 20:50:07 »
U firebirdu mi tiez vadi problematicka dokumentacia.
Firebird zase tak prilis nevybocuje z rady OSS, ke kteremu neni dokumentace, ale autori napsali a nadace prodava monografii na dane tema.
Mam v Ksindlu nekolik desitek e-booku z doby, kdyz jsme par let koketovali s JEE a OSS svetem...

Pokud chce clovek neco vazne delat s Firebirdem, mel by si IMHO koupit http://www.firebirdsql.org/en/books/.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1626
  • Karma: 67
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (teď XE8 a XE10)
    • O Delphi v češtině
Re:Datum a čas z MySQL na TDateTime
« Odpověď #28 kdy: 01-08-2014, 22:44:11 »
Jelikož koketuji s vývojem pro Android tak jsem uvítal, že EMBT oznámilo IBLite verzi i pro Desktop, tj. můžu použít stejnou DB (Embedded Interbase bez omezení, ale i bez šifrování) napříč platformami.

Jinak se mi líbí PostgreSQL, ale z historických důvodů a z důvodů vedení (nikdo nevyhodí člověka co zvolí MS řešení) jedeme na MSSQL
« Poslední změna: 01-08-2014, 22:54:55 od Radek Červinka »
Embarcadero MVP - Czech republic

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 392
  • Karma: 15
    • Verze Delphi: D2007, XE3
Re:Datum a čas z MySQL na TDateTime
« Odpověď #29 kdy: 02-08-2014, 09:51:14 »
3) pokud nepotrebuju embedded verzi, sahnul bych po Postgre, ktera patri take mezi dospele RDBMS a je plne skalovatelna na ruzne zelezo

Predpokladam ze u Postgre sa bude dat urobit taka ista partizancina ako u MySQL. Raz som robil nieco na MySQL a rozmyslal som nad embeded verziou. Trosku co som pobehal po nete, tak som narazil ne nejake varovania a obmedzenia embeded verzie, a kedze sa mi s tym nechcelo zaoberat (nebola to komercna aplikacia) tak som to nakoniec spravil tak ze som cely adresar s MySQL pribalil k aplikacii (bolo to nieco cez 100MB) a aplikacia si tu MySQLku spustala pri starte ako klasicku DB v rezime aplikacia (nie sluzba) len s nejakym divokym, nestandardnym portom a potom sa ku nej pripajala klasicky cez TCPIP. Ano je to partizancina, ale fungovalo to a nemusel som spekulovat nad ziadnymi rozdielmi. Jedine problemom by mohol byt firewall, ktory by mohol chciet blokovat pouzity port, ale pre lokalnu aplikaciu to snad zvycajne nehrozi. Predpokladam ze v pripade nudze sa to da pouzit aj pri Postgre. Kedze Postgre nema embeded verziu, mohlo by to byt v pripade nudze snad pouzitelne ako zachrana...

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #30 kdy: 02-08-2014, 10:22:39 »
MS SQL má nevýhodu: je jen pro Windows. Koupit příručku na Firebird? Ne, děkuji. Co se týče licence MySQL - pro nekomerční aplikace (můj případ) je zdarma.

hu

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2611
  • Karma: 23
    • Verze Delphi: XE7 professional
Re:Datum a čas z MySQL na TDateTime
« Odpověď #31 kdy: 02-08-2014, 11:23:59 »
OT
1) Prvé čo som sa o FB dočítal bolo, že je odvodený od IB. A tým aj kompaktibilný s komponentami pre IB. A to som naozaj amatér bez angličtiny.

2) Že pri FB treba investovať do literatúry je isté. Ale to isté platí aj o ostatných produktoch. Pôvodný help väčšinou nestačí.

3)
Citace
Koupit příručku na Firebird? Ne, děkuji.
Beriem do úvahy, že niečo také sa robí až po rozhodnutí, že do toho idem. Ale vždy ma fascinuje prístup typu:
Ja chcem všetko zadarmo, ale dám si zaplatiť aj číslo topánok!

Je nejakých 100 - 200€ veľa, ak zarobíš tisíce? Neviem či to je Tvoj prípad ;)

Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #32 kdy: 02-08-2014, 12:07:44 »
To je ze zlata? :o Nemám nic proti investicím v případě, že mají rozumnou návratnost.
A zase komponenty. Ty, ke kterým bych musel dokoupit za nemalé peníze nějaký "balíček" aby byl vzdálený přístup k DB.  Peníze o které mne ani nenapadne požádat kvůli požadavku na přechod na Linux - to znamená zapomenout na C++ Builder, na VCL, na komponenty třetích stran...

hu

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1679
  • Karma: 70
    • Verze Delphi: D2007, XE3, DX10
Re:Datum a čas z MySQL na TDateTime
« Odpověď #33 kdy: 02-08-2014, 12:32:20 »
Co se týče licence MySQL - pro nekomerční aplikace (můj případ) je zdarma.
Ovsem toto tvrzeni je, eufemisticky receno, nepresne: Spis nepravdive. Oracle explicitne definuje, ze zadarmo je to jen pro svobodny soft pod licenci GPL.

A pokud nekdo pise svobodny soft, tak k tomu pouziva prekladace, knihovny a jine nastroje zase z rodiny OSS, aby si kdokoli mohl povinne zverejnene zdrojovky  prelozit a nemusel si porizovat placeny prekladac. Takze jsi ve skupine Delphi nejspis omylem ;-)

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Datum a čas z MySQL na TDateTime
« Odpověď #34 kdy: 02-08-2014, 18:09:30 »
To je trochu složitější, ale to by ti vysvětlil náš právník. Pokud k něčemu dojde, bude muset ten samý právník to u soudu obhájit.
Jinak jsi v diskuzi C/C++. Co se týče placeného překladače - ten opouštím.

hu
« Poslední změna: 02-08-2014, 18:11:06 od hlucheucho »

 

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):