Проблема здесь в том, что ваш объект пытается обновить строку из базы данных, чтобы убедиться, что ничего не изменилось, и, скорее всего, объект урезал или округлил какое-то значение, которое приводит к тому, что обновление не возвращает строк.
Это может быть вызвано усечением значения с плавающей запятой или отключением какого-либо другого значения.
если вы не можете / не можете изменить этот столбец, чтобы устранить эту проблему, я бы посоветовал изменить его на upWhereChanged илиupWhereKeyOnly.
Учитывая, что даты обрабатываются как двойные в большинстве баз данных Windows, я думаю, что upWhereKeyOnly будет лучше.
EDIT:
После просмотра вашей таблицы, онаможет иметь отношение к тому факту, что вы используете одно основанное smalldatetime.Delphi рассматривает все данные DateTime как двойные, и преобразование назад и вперед может вызывать небольшие проблемы с округлением.