Autor Téma: Adoquery a cas  (Přečteno 1459 krát)

Offline jarex

  • Plnoletý
  • ***
  • Příspěvků: 201
  • Karma: 4
Adoquery a cas
« kdy: 02-12-2016, 10:12:55 »
Toto zahlásí konversion error při pokusu o zápis do databáze.

Kód: [Vybrat]
var
tm: tdatetime;

begin
fmt.ShortDateFormat:='dd/mm/yyyy';
fmt.DateSeparator  :='/';
fmt.LongTimeFormat :='hh:nn:ss';
fmt.TimeSeparator  :=':';

tm:=strtodatetime('23/02/2017 12:30:10', fmt);


adoquery1.sql.text := 'SELECT * FROM Vlacky';
adoquery1.open;
adoquery1.insert;
adoquery1.fieldbyname('datum').asdatetime := tm;

toto projde:

Kód: [Vybrat]
var
tm: tdatetime;

begin


tm:=now;


adoquery1.sql.text := 'SELECT * FROM Vlacky';
adoquery1.open;
adoquery1.insert;
adoquery1.fieldbyname('datum').asdatetime := tm;


Proč?

datum je v databázi jako date


Poradil by prosím moc někdo, jak zapsat datum a jak zapsat čas?

Děkuji moc
D2007 Professional

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2999
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:Adoquery a cas
« Odpověď #1 kdy: 02-12-2016, 10:27:27 »
Neporadím, ale už ten dátum Ti nemôže prejsť. V takom prípade ho musíš mať Rok/Mesiac/Deň. Ale na to sú iné funkcie. DecodeDate, EncodeDate a spol.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 568
  • Karma: 23
Re:Adoquery a cas
« Odpověď #2 kdy: 02-12-2016, 10:45:24 »
No a jakou chybu to píše? Někde hh znamená 12 hodinový formát času, takže tam mohou být hodnoty 0-11 a AM/PM, HH je 24 hodinový. Jestli máš ty jednotlivé složky, tak bych to prostě složil přes ten encodeNeco a zapsalo přímo insertem do db.

Offline jarex

  • Plnoletý
  • ***
  • Příspěvků: 201
  • Karma: 4
Re:Adoquery a cas
« Odpověď #3 kdy: 02-12-2016, 11:15:55 »
Kód: [Vybrat]
tm := EncodeTime(19, 34, 56, 789);
   tm:=tm+ Encodedate(2015, 12, 04);

   ShowMessage(DateToStr(tm));
   ShowMessage(TimeToStr(tm));


adoquery1.sql.text := 'SELECT * FROM Vlacky';;
adoquery1.open;
adoquery1.insert;
adoquery1.fieldbyname('Cislo').asstring := quotedstr('value1');
adoquery1.fieldbyname('Stav').asstring := quotedstr('value2');
//adoquery1.fieldbyname('datum').asdatetime := datetimepicker2.date;
adoquery1.fieldbyname('cas').asdatetime := tm;
adoquery1.post;
adoQuery1.Close;

Cas v poradku, datum taky.
Chyba z Debuger Exception Notification:
Conversion failed when converting date and/or time from character string.
Vůbec tomu nerozumim co se myslí tím from character string.
D2007 Professional

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 286
  • Karma: 17
    • Verze Delphi: 10.2
Re:Adoquery a cas
« Odpověď #4 kdy: 02-12-2016, 12:33:51 »
A co vrací adoquery1.fieldbyname('cas').ClassName? Jestli to z nějakého důvodu nechápe jako textové pole...

Offline jarex

  • Plnoletý
  • ***
  • Příspěvků: 201
  • Karma: 4
Re:Adoquery a cas
« Odpověď #5 kdy: 02-12-2016, 15:00:22 »
pokud se to pošle jako variant, tak to projde.

Kód: [Vybrat]
begin

adoquery1.sql.text := 'SELECT * FROM Vlacky';;
adoquery1.open;
adoquery1.insert;
adoquery1.fieldbyname('Cislo').asstring := 'value1';
adoquery1.fieldbyname('Stav').asstring := 'value2';
adoquery1.fieldbyname('datum').value := Encodedate(2015, 12, 04);
adoquery1.fieldbyname('cas').value:= EncodeTime(19, 34, 56, 789);;
adoquery1.post;
adoQuery1.Close;

end;

Doufám, že je to tak správně.
D2007 Professional

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2999
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:Adoquery a cas
« Odpověď #6 kdy: 02-12-2016, 15:11:30 »
Správne Ti to má fungovať aj takto
Kód: [Vybrat]
adoquery1.fieldbyname('datum').AsDate := Encodedate(2015, 12, 04);
Ja tak používam, ale s FireDAC. A nie je problém.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

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