Databáze > MS SQL
ADO datetime ukládání včetně milisekund
jaja:
Zdravím všechny,
při ukládání hodnoty datetime na SQL servru 2016 se neuloží do tabulky hodnota včetně milisekund,
respektive uložená časová známka v tabulce má vždy 0 milisekund:
--- Kód: Delphi --- with ADOQuery1 do begin SQL.Text:='select top(1) * from Table1'; Active:=True; if not EOF then begin Edit; FieldByName('HeartBeat').AsDateTime:=now; Post; end; Active:=false; end;
samozřejme zavolaný update command funguje včetně milisekund:
--- Kód: Delphi --- with ADOQuery1 do begin SQL.Text:='update Table1 set HeartBeat = getUTCDate()'; ExecSQL; end;
pokud existuje možnost jak uložit časovou známku do datetime sloupce včetně milisekund pomocí ADO pak předem dík
jaja:
datový typ sloupce v tabulce je právě datetime a milisekundy jsou nulové u časové známky,
naopak pokud uložím časovou známku do sloupce typu nvarchar pak je uložená hodnota včetně milisekund,
bohužel potřebuju u stávejícího projektu (nelze měnit typy sloupců) změnit ukládaní včetně milisekund
jaja:
jedna se o Delphi 10.2 a SQL server 2016 + SP2, ADO verzi nevim jak zjistit, ale ADO bylo nainstalovano jako soucast Delphi 10.2,
zajimave je, ze cteni datetime hodnoty z databaze funguje vcetne milisekund (pokud jsou milisekundy nenulove diky update prikazu):
--- Kód: Delphi ---var myDate: TDateTime;begin with ADOQuery1 do begin SQL.Text:='select top(1) * from Table1'; Active:=True; if not EOF then myDate:= FieldByName('HeartBeat').AsDateTime; Active:=False; end;
Jirka:
--- Citace --- FieldByName('HeartBeat').AsDateTime:=now;
--- Konce citace ---
Máš ověřeno že "now" skutečně vykazuje milisekundy ?
jaja:
ano promenna v delphi obsahuje i milisekundy, ale hodnota v databazi ma milisekundy 0:
--- Kód: Delphi ---var myDate: TDateTime; myYear, myMonth, myDay: Word; myHour, myMin, mySec, myMilli: Word;begin with ADOQuery1 do begin SQL.Text:='select top(1) * from Table1'; Active:=True; if not EOF then begin Edit; myDate:=now; DecodeDateTime(myDate, myYear, myMonth, myDay, myHour, myMin, mySec, myMilli); //myMilli gets right millisedond value from myDate FieldByName('HeartBeat').AsDateTime:=myDate; Post; end; Active:=false; end;
zkousel jsem v prirazeni misto AsDateTime pouzit AsSQLTimeStamp, ale i v tomto pripade se milisekundy neulozi:
--- Kód: Delphi ---var dt: tsqltimestamp; dt:= DateTimeToSQLTimeStamp(myDate); FieldByName('HeartBeat').AsSQLTimeStamp:=dt;
Navigace
[0] Seznam témat
[#] Další strana
Přejít na plnou verzi