Дополнение.
Технические подробности: Windows10, PostgreSQL 12, Lazarus trunk (с 2.2.2 такая же ситуация), ZeosDBO 8 trunk, EhLib 10.2.029
К сожалению, как надо не заработало. Скомпилировалось, данные добавляет без исключений, но вот не работает дальше.
Почти любая попытка обращения к такому полю, если значение не нулевое, приводит к исключению. Чаще всего это EOutOfRange, иногда бывает переполнение BCD, иногда eBCDNotImplementedException, которое вызывается в единственном случае, если TVarData.VType неизвестен модулю FmtBCD. Если исключения не возникает, то значения случайные, не те, которые в запись заносились. Складывается впечатление, что в структуре данных MemTableEh лежит указатель на некую область памяти, в которой находится мусор.
Точно установлено, что данные портятся за пределами метода
Код:
procedure TCustomMemTableEh.SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean);
(там из RecBuf во время отладки можно достать правильные данные).
В принципе, "родной" MemTable из Zeos работает корректно, но с ним будет невозможна локальная сортировка и фильтрация в DBGridEh. Откат обратно на Zeos 7.2 также нежелателен, потому что, кроме важных вещей, не относящихся к этой теме, поля типа numeric транслировались в поля TFloatField с соответствующей потерей точности (значения вроде 0,39999999999 вместо точного 0,4).
Вопрос: можно исправить работу с полями типа ftFMTBCD?
С уважением
Евгений.