dbExpress не читает часть миллисекунд полей TimeStamp - PullRequest
1 голос
/ 11 марта 2011

В последнее время некоторые приложения Delphi / InterBase отображают

«Запись не найдена или изменена другим пользователем» *

Они используют компоненты TSQLQuery / TClientDataSet (или TSimpleDataSet) по умолчанию (или TSimpleDataSet)dbExpress.

Мы обнаружили, что в таблице базы данных поле хранилось в миллисекундах приложением, отличным от dbExpress.

Похоже, dbExpress не считывал миллисекунды из БД и используетэто усеченное значение в условии 'where' оператора SQL таблицы обновления, поэтому не было найдено соответствующей записи для обновления.

Update : мы используем поля TSQLTimeStamp в приложении Delphi.Ни один обработчик OnBeforePost не изменяет значение поля.

Обновление 2

Как видно из IBExternals.pas, PCTimeStructure не имеет миллисекундной части.Так что «по замыслу» нет поддержки миллисекунд для InterBase в Delphi (2009).

Кто-нибудь знает, была ли добавлена ​​поддержка ms в более поздней версии Delphi?

Ответы [ 3 ]

3 голосов
/ 11 марта 2011

Полагаю, это isc_decode_timestamp API клиента Interbase / Firebird, который не поддерживает миллисекунды. Здесь является связанной проблемой трекера Firebird.

Обновление: также смотрите этот ответ .

0 голосов
/ 13 июля 2012
var
  tmpDTS: string;
  tmpDT: TDateTiume;

DateTimeToString(tmpDTS,'yyyy"."mm"."dd" "hh"."nn"."ss" "zzz',tmpDT);

В этом формате я вставляю запись в таблицу Firebird (через TSQLQuery), и Flamerobin показывает точное значение.

Вместо этого, если я вставлю значение с помощью параметра TDateTime, миллисекунды будут обрезаны. DBGrid показывает усеченные значения.

Delphi XE, Db Express, драйвер Firebird, Firebird 2.5.1.

0 голосов
/ 11 марта 2011

Не знаю, dbexpress достаточно хорошо, чтобы сказать, так или иначе, но это может быть база данных, которая выполняет обрезку. Я знаю, что, например, SQL-сервер пропускает миллисекунды, которые ему передаются. Вы можете попробовать столбцы TIMESTAMP вместо DATETIME (не уверены в точных именах). Возможно, столбцы TIMESTAMP имеют разрешение в миллисекундах в используемой вами базе данных.

...