Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2015, 09:30   #1
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
Вопрос Отсекаются миллисекунды в TIBSQL

Добрый день. Есть такая проблема что при перегонки данных из MSSQL в Firebird отсекаются миллисекунды.

После вот такого кода
Код:
FIBSql.ParamByName('DT').AsDateTime := FADOQuery.Fields.FieldByName('LogDate').AsDateTime;
Код:
FIBSql.ParamByName('DT').AsDateTime
уже будет без миллисекунд.
Кто что знает про это и как решить? может там настройки точности есть какие для этого компонента
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 01.04.2015, 11:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А получение FADOQuery.Fields.FieldByName('LogDa te').AsDateTime; вообще дает миллисекунды?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.04.2015, 14:14   #3
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

да, дает .
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 01.04.2015, 14:15   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А где видно, что отсекаются? Может там с форматированием отображения не то? Не должно так происходить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.04.2015, 14:37   #5
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

Видно и в отладчике если делать FormatDatetime(hh:nn:ss.zzz) и уже в самой базе
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 01.04.2015, 14:57   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Так что показывает:

SELECT EXTRACT(SECOND FROM dt) FROM mytable

SELECT CAST(dt AS VARCHAR(24)) FROM mytable
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.04.2015, 15:09   #7
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

Код:
SELECT CAST(dt AS VARCHAR(24)) FROM mytable
Дает без обнуленные миллисекунды. Сотрел код. там где происходит EncodingDatetime в функции TIBXSQLVAR.GetAsDateTime на месте миллисекунд стоит 0!
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 01.04.2015, 15:18   #8
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

a если Value использовать?
lomastr_ вне форума Ответить с цитированием
Старый 01.04.2015, 15:19   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Тоды наверно только так
Код:
insert into MyTable (dt,...) values ('2015-04-01 15:17:01.4421',...)
или править GetAsDateTime
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.04.2015, 09:32   #10
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

Ну в общем сделал так. Не знаю насколько правильно, но миллисекунды появились
Код:
procedure TIBXSQLVAR.SetAsDateTime(Value: TDateTime);
var
  i: Integer;
  tm_date: TCTimeStructure;
  Yr, Mn, Dy, Hr, Mt, S, Ms: Word;
  xvar: TIBXSQLVAR;
begin
  if IsNullable then
    IsNull := False;
  for i := 0 to FParent.FCount - 1 do
    if FParent.FNames[i] = FName then
    begin
      xvar := FParent[i];
      xvar.FXSQLVAR.sqltype := SQL_TIMESTAMP or (xvar.FXSQLVAR.sqltype and 1);
      DecodeDate(Value, Yr, Mn, Dy);
      DecodeTime(Value, Hr, Mt, S, Ms);
      with tm_date do begin
        tm_sec := S;
        tm_min := Mt;
        tm_hour := Hr;
        tm_mday := Dy;
        tm_mon := Mn - 1;
        tm_year := Yr - 1900;
      end;
      xvar.FXSQLVAR.sqllen := SizeOf(TISC_QUAD);
      xvar.FXSQLVAR.SetDataSize(0, xvar.FXSQLVAR.sqllen);
      FGDSLibrary.isc_encode_date(@tm_date, PISC_QUAD(xvar.FXSQLVAR.sqldata));
      PISC_QUAD(xvar.FXSQLVAR.sqldata)^.gds_quad_low := PISC_QUAD(xvar.FXSQLVAR.sqldata)^.gds_quad_low + ms; //мои изменения
      xvar.FModified := True;
    end;
end;
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дата и время с точностью до миллисекунды alexchromets Общие вопросы по Java, Java SE, Kotlin 4 11.02.2013 11:46
Вывод текущего времени формата H:M:S:MS, где MS - миллисекунды Gypsy Помощь студентам 5 13.01.2010 18:05