Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Firebird numeric(14, 4) - проблемы с IBX / 9 сообщений из 9, страница 1 из 1
04.07.2019, 16:01
    #39833900
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird numeric(14, 4) - проблемы с IBX
Приветствую.
Есть учетная программа, написаная на Дельфи и использующая Firebird 2.5 через IBX. В IBX пара модулей отредактированные, уже не помню, откуда их взял в свое время или что в них правил по каким-то рекомендациям. В Delphi 2010 с одним моментом проблем не было, в Delphi XE3 возникла.
В БД есть домен PRICES
Код: sql
1.
2.
CREATE DOMAIN PRICES AS
NUMERIC(14,4);


В Delphi, если создаю persistent поля, то получается TIBBCDField, про который в исходниках IBX написано в комментарии
Код: pascal
1.
2.
3.
4.
5.
6.
  {  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 в строчках
Код: pascal
1.
2.
3.
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'.
Никто не сталкивался?
...
Рейтинг: 0 / 0
04.07.2019, 16:03
    #39833905
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird numeric(14, 4) - проблемы с IBX
s62Исправляю в свойствах поля свойство Size на 4, компилируется, работает без ошибок, но потом, то ли при сохранении, то ли в какой-то еще момент размер снова становится 8 и появляется эта ошибка.То есть появляется при следующей (одной из следующих) компиляций.
...
Рейтинг: 0 / 0
04.07.2019, 16:05
    #39833907
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird numeric(14, 4) - проблемы с IBX
s62,
точнее в процессе работы программы после компиляции, как описано в первом сообщении - когда открывается датасет (например при открытии окна), в котором есть такое поле.
...
Рейтинг: 0 / 0
04.07.2019, 16:19
    #39833923
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird numeric(14, 4) - проблемы с IBX
s62,

Устанавливай значение в TDataSet.AfterOpen
...
Рейтинг: 0 / 0
04.07.2019, 16:29
    #39833931
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird numeric(14, 4) - проблемы с IBX
_Vasilisk_s62,

Устанавливай значение в TDataSet.AfterOpenСпасибо за наводку, AfterOpen не помогло, а BeforeOpen помогло. Сейчас попробую со всеми датасетами.
Вот не понял пока причину, откуда это берется.
...
Рейтинг: 0 / 0
04.07.2019, 16:50
    #39833957
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird numeric(14, 4) - проблемы с IBX
s62, FB не знаю толком и не знаю, что такое CREATE DOMAIN PRICES AS NUMERIC(14,4);
Похоже на ТИП ДАННЫХ с фиксированной точкой

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

Вьюшкой, функцией, что там у FB есть?
...
Рейтинг: 0 / 0
04.07.2019, 17:00
    #39833962
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird numeric(14, 4) - проблемы с IBX
Gator,

да, это тип данных с фиксированной точкой, у меня в программе его значения присваиваются переменным типа Currency. Использую для цен.
...
Рейтинг: 0 / 0
05.07.2019, 11:14
    #39834254
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird numeric(14, 4) - проблемы с IBX
s62В IBX пара модулей отредактированные, уже не помню, откуда их взял в свое время или что в них правил по каким-то рекомендациям
А взять оригинальные исходники и диффом пройтись по своим, не вариант?
...
Рейтинг: 0 / 0
05.07.2019, 13:15
    #39834347
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird numeric(14, 4) - проблемы с IBX
Докs62В IBX пара модулей отредактированные, уже не помню, откуда их взял в свое время или что в них правил по каким-то рекомендациям
А взять оригинальные исходники и диффом пройтись по своим, не вариант?Проходил когда-то, но это не так важно в данной теме, эти немногочисленные изменения касаются других вещей (глянул сейчас, там на самом деле одно место, касающееся строкового поля, и имя клиентской библиотеки заменено на fbclient). Просто написал об этом для полноты описания ситуации. :)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Firebird numeric(14, 4) - проблемы с IBX / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]