Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Firebird numeric(14, 4) - проблемы с IBX  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1002
Приветствую.
Есть учетная программа, написаная на Дельфи и использующая Firebird 2.5 через IBX. В IBX пара модулей отредактированные, уже не помню, откуда их взял в свое время или что в них правил по каким-то рекомендациям. В Delphi 2010 с одним моментом проблем не было, в Delphi XE3 возникла.
В БД есть домен PRICES
CREATE DOMAIN PRICES AS
NUMERIC(14,4);

В Delphi, если создаю persistent поля, то получается TIBBCDField, про который в исходниках IBX написано в комментарии
  {  Actually, there is no BCD involved in this type,
     instead it deals with currency types.
     In IB, this is an encapsulation of Numeric (x, y)
     where x < 18 and y <= 4.
     Note: y > 4 will default to Floats
  }

Свойство Size по умолчанию для компонента TIBBCDField равно 8, но в моем случае 4 (в Delphi 2010) и работает нормально. В Delphi XE3 компилируется нормально, но во время работы программы возникает исключение в TDataSet.CheckFieldCompatibility в строчках
if (Field.DataType in CheckTypeSizes) and (Field.Size <> FieldDef.Size) then
    DatabaseErrorFmt(SFieldSizeMismatch, [Field.DisplayName, Field.Size,
      FieldDef.Size], Self);

Исправляю в свойствах поля свойство Size на 4, компилируется, работает без ошибок, но потом, то ли при сохранении, то ли в какой-то еще момент размер снова становится 8 и появляется эта ошибка.
Project LesDb.exe raised exception class EDatabaseError with message 'ibqDevices: Size mismatch for field 'Цена, у.е.', expecting: 8 actual: 4'.

Никто не сталкивался?
4 июл 19, 16:01    [21920872]     Ответить | Цитировать Сообщить модератору
 Re: Firebird numeric(14, 4) - проблемы с IBX  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1002
s62
Исправляю в свойствах поля свойство Size на 4, компилируется, работает без ошибок, но потом, то ли при сохранении, то ли в какой-то еще момент размер снова становится 8 и появляется эта ошибка.
То есть появляется при следующей (одной из следующих) компиляций.
4 июл 19, 16:03    [21920877]     Ответить | Цитировать Сообщить модератору
 Re: Firebird numeric(14, 4) - проблемы с IBX  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1002
s62,
точнее в процессе работы программы после компиляции, как описано в первом сообщении - когда открывается датасет (например при открытии окна), в котором есть такое поле.
4 июл 19, 16:05    [21920880]     Ответить | Цитировать Сообщить модератору
 Re: Firebird numeric(14, 4) - проблемы с IBX  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11196
s62,

Устанавливай значение в TDataSet.AfterOpen
4 июл 19, 16:19    [21920899]     Ответить | Цитировать Сообщить модератору
 Re: Firebird numeric(14, 4) - проблемы с IBX  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1002
_Vasilisk_
s62,

Устанавливай значение в TDataSet.AfterOpen
Спасибо за наводку, AfterOpen не помогло, а BeforeOpen помогло. Сейчас попробую со всеми датасетами.
Вот не понял пока причину, откуда это берется.
4 июл 19, 16:29    [21920911]     Ответить | Цитировать Сообщить модератору
 Re: Firebird numeric(14, 4) - проблемы с IBX  [new]
Gator
Member

Откуда: Москва
Сообщений: 14978
s62, FB не знаю толком и не знаю, что такое CREATE DOMAIN PRICES AS NUMERIC(14,4);
Похоже на ТИП ДАННЫХ с фиксированной точкой

Попробуй в FB представить его в удобоваримый дельфийский тип.
Напр., Extended, String, BCD, парой целых(до и после запятой)

Вьюшкой, функцией, что там у FB есть?
4 июл 19, 16:50    [21920949]     Ответить | Цитировать Сообщить модератору
 Re: Firebird numeric(14, 4) - проблемы с IBX  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1002
Gator,

да, это тип данных с фиксированной точкой, у меня в программе его значения присваиваются переменным типа Currency. Использую для цен.
4 июл 19, 17:00    [21920957]     Ответить | Цитировать Сообщить модератору
 Re: Firebird numeric(14, 4) - проблемы с IBX  [new]
Док
Member

Откуда: Казань
Сообщений: 6430
s62
В IBX пара модулей отредактированные, уже не помню, откуда их взял в свое время или что в них правил по каким-то рекомендациям

А взять оригинальные исходники и диффом пройтись по своим, не вариант?
5 июл 19, 11:14    [21921440]     Ответить | Цитировать Сообщить модератору
 Re: Firebird numeric(14, 4) - проблемы с IBX  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1002
Док
s62
В IBX пара модулей отредактированные, уже не помню, откуда их взял в свое время или что в них правил по каким-то рекомендациям

А взять оригинальные исходники и диффом пройтись по своим, не вариант?
Проходил когда-то, но это не так важно в данной теме, эти немногочисленные изменения касаются других вещей (глянул сейчас, там на самом деле одно место, касающееся строкового поля, и имя клиентской библиотеки заменено на fbclient). Просто написал об этом для полноты описания ситуации. :)
5 июл 19, 13:15    [21921568]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить