|
#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) для милисекунд, исоответственно милисекунды сохранял отдельно, тогда все проблемы бы иссякли, и запрос можно построить и работать с данными вполне удобно.
|