|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.04.2016, 22:38 | #1 |
Регистрация: 29.03.2013
Сообщений: 5
|
Проблема с NUMERIC в FIBPlus 6.9.9 не могу устранить
Программа написана на Delphi 2010, FireBird 2.5, FIBPlus 6.9.9, поле NUMERIC(8,2). Происходят удивительные вещи. Если после запуска программы открыть первой форму в которой используется это поле и вводить числа типа 1.02, 0.99, 0.95, 0.01 и т.д. и т.п. то все нормально, но если эту же форму открыть после любой другой формы в программе (закрывать ее, открывать снова, закрыть все формы и снова ее открыть), то при попытке ввести числа указанные выше, каждое из них будет увеличено на 0.02, DisplayFormat = '0.00', RoundByScale = True, если эти свойства изменить на DisplayFormat = '', RoundByScale = False, то числа увеличиваются на 0.01. Не могу понять, что делать, неужели в BeforePost надо встраивать какие нибудь костыли? Помогите пожалуйста!
|
14.04.2016, 00:29 | #2 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 594
|
Сейчас схлопочете от модератора за дублирование этого вопроса в чужой теме
|
14.04.2016, 07:18 | #3 |
Регистрация: 29.03.2013
Сообщений: 5
|
Это не дублирование, т.к. рецепты указанные в похожих темах, не помогли, есть подозрение что это глюк именно FIBPlus 6.9.9, т.к. использование полей с плавающей точкой настоящее издевательство, полюбому записывается не то что надо, например если указать тип поля DOUBLE PRECISION то при попытке записать в поле значение 0.90000001 будет записано 0.895669736943 или что то подобное! Сейчас времени нет, но попробую в BeforePost что то сделать, если получиться отпишусь.
Кстати эта проблема сильно влияет на работу с ценами и наценками в финансовой программе. |
14.04.2016, 08:11 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 19,042
|
Как раз в BeforePost будет настоящее издевательство. А как тип поля для NUMERIC(8,2) на стороне делфи интерпретируетя - BCD или FIBBCD? Нужно второе
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
14.04.2016, 13:14 | #5 |
Регистрация: 29.03.2013
Сообщений: 5
|
Поле интерпретируется как TFIBFloatField и даже ручная замена на указанный Вами тип не помогла, сразу после открытия DataSet'а выпадает исключение что тип поля FIBFloat а я пытаюсь его интерпретировать как FIBBCD.
Но вот что странно, я потихоньку подхожу к разгадке. Дело в том, что такие странности со значениями происходят только после открытия одной из форм приложения (Расходные накладные), если ее вообще не открывать, то значения не искажаются при любых манипуляциях с другими формами. Сейчас просто времени нет исследовать этот вопрос, но как пойму в чем дело, отпишусь! |
20.04.2016, 00:17 | #6 |
Регистрация: 29.03.2013
Сообщений: 5
|
Наконец то нашел в чем проблема
После долгого поиска, я нашел. Сначала сделал тестовое приложение в котором подключился к базе и вывел таблицу с проблемным полем. Попробовал в нем, ошибки нет, значит проблема в основном приложении, причем проблема начинается после запуска формы с расходными накладными. Стал искать, что же это могло быть, и методом тыка нашел. Закомментировал в датасете код в событии OnCalcFields, и все ошибка пропала. Стал смотреть, что вызываю в OnCalcFields, а там функция SetRoundMode(rmUp) - эта функция именно с этим параметром и искажала значение в таблице, точнее после вызова этой функции с этим параметром начинались глюки с вещественными числами. Всем спасибо, за участие!
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не могу понять, что за ошибка и как устранить | mpdasa | Общие вопросы C/C++ | 8 | 27.06.2012 21:43 |
Invalid numeric input | ДениC | Общие вопросы Delphi | 4 | 03.04.2011 12:49 |
Varchar и numeric | АлёнаP | SQL, базы данных | 2 | 15.01.2010 08:58 |
Не могу устранить ошибку EAccessViolation | k1r1ch | Общие вопросы Delphi | 8 | 06.07.2009 12:07 |