![]() |
|
|
#1
|
|||
|
|||
|
Доброе времени суток!!! У меня возникла такая проблема: мне необходимо записывать в таблицу БД системное время по Гринвичу с точностью до миллисекунды. Нахожу время всё нормально, но записывается это время в БД без миллисекунд, хотя и указываю формат времени.
Код:
// функция определение фремени по гринвичу
function GetCurrentGMT: TDateTime;
var
y: TSystemTime;
begin
GetSystemTime(y);
result := SystemTimeToDateTime(y);
end;
......
var s:string;
begin
// DateTimeToString(s,'hh:mm:ss.zzzz',GetCurrentGMT); // переводим время в строку
with Client.q do
begin
Active:=false;
SQL.Clear;
SQL.Add('INSERT INTO '+tablica+'( '+fld1+', '+fld2+', '+fld3+', '
+fld4+', '+fld5+', '+fld6+') VALUES( ');
SQL.Add(QuotedStr(massiv[0])+','+QuotedStr(massiv[1])+','
+QuotedStr(massiv[2])+','+QuotedStr(massiv[3])+','+QuotedStr(massiv[4])
+', :Time)');
Params.ParamByName('Time').Value := FormatDateTime('hh:mm:ss.zzz', GetCurrentGMT);
ExecSQL;
end;Подскажите, как сделать так чтобы время отображалось полностью с миллисекундами. |
|
#2
|
||||
|
||||
|
Нет в БД типа поля для формата времени с учетом миллисекунд, минимальное значение - секунда. Но никто не мешает хранить время в БД как строку, и трансформацию строки в нужное время с миллисекундами производить в программе. Вот только использовать такой способ для работы с датами через SQL уже весьма проблематично.
Можно сделать иначе. Отдельно хранить Время до секунд, а отдельно миллисекунды. Тогда никаких проблем работы с датами не ожидается. Наконец можно просто преобразовать время в миллисекунды и хранить как большое число. |
|
#3
|
|||
|
|||
|
Цитата:
|
|
#4
|
|||
|
|||
|
Я бы использовал тип DateTime для хранения времени до секунды, и тип Numeric(3,0) для милисекунд, исоответственно милисекунды сохранял отдельно, тогда все проблемы бы иссякли, и запрос можно построить и работать с данными вполне удобно.
|