Databáze > MS SQL

ADO datetime ukládání včetně milisekund

(1/3) > >>

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