Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2016, 22:38   #1
AmAlAlexander
 
Регистрация: 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 надо встраивать какие нибудь костыли? Помогите пожалуйста!
AmAlAlexander вне форума Ответить с цитированием
Старый 14.04.2016, 00:29   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Сейчас схлопочете от модератора за дублирование этого вопроса в чужой теме
kropotkina-alice вне форума Ответить с цитированием
Старый 14.04.2016, 07:18   #3
AmAlAlexander
 
Регистрация: 29.03.2013
Сообщений: 5
По умолчанию

Это не дублирование, т.к. рецепты указанные в похожих темах, не помогли, есть подозрение что это глюк именно FIBPlus 6.9.9, т.к. использование полей с плавающей точкой настоящее издевательство, полюбому записывается не то что надо, например если указать тип поля DOUBLE PRECISION то при попытке записать в поле значение 0.90000001 будет записано 0.895669736943 или что то подобное! Сейчас времени нет, но попробую в BeforePost что то сделать, если получиться отпишусь.
Кстати эта проблема сильно влияет на работу с ценами и наценками в финансовой программе.
AmAlAlexander вне форума Ответить с цитированием
Старый 14.04.2016, 08:11   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Как раз в BeforePost будет настоящее издевательство. А как тип поля для NUMERIC(8,2) на стороне делфи интерпретируетя - BCD или FIBBCD? Нужно второе
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.04.2016, 13:14   #5
AmAlAlexander
 
Регистрация: 29.03.2013
Сообщений: 5
По умолчанию

Поле интерпретируется как TFIBFloatField и даже ручная замена на указанный Вами тип не помогла, сразу после открытия DataSet'а выпадает исключение что тип поля FIBFloat а я пытаюсь его интерпретировать как FIBBCD.
Но вот что странно, я потихоньку подхожу к разгадке. Дело в том, что такие странности со значениями происходят только после открытия одной из форм приложения (Расходные накладные), если ее вообще не открывать, то значения не искажаются при любых манипуляциях с другими формами. Сейчас просто времени нет исследовать этот вопрос, но как пойму в чем дело, отпишусь!
AmAlAlexander вне форума Ответить с цитированием
Старый 20.04.2016, 00:17   #6
AmAlAlexander
 
Регистрация: 29.03.2013
Сообщений: 5
По умолчанию Наконец то нашел в чем проблема

После долгого поиска, я нашел. Сначала сделал тестовое приложение в котором подключился к базе и вывел таблицу с проблемным полем. Попробовал в нем, ошибки нет, значит проблема в основном приложении, причем проблема начинается после запуска формы с расходными накладными. Стал искать, что же это могло быть, и методом тыка нашел. Закомментировал в датасете код в событии OnCalcFields, и все ошибка пропала. Стал смотреть, что вызываю в OnCalcFields, а там функция SetRoundMode(rmUp) - эта функция именно с этим параметром и искажала значение в таблице, точнее после вызова этой функции с этим параметром начинались глюки с вещественными числами. Всем спасибо, за участие!
AmAlAlexander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять, что за ошибка и как устранить 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