Добавляю запрос, который выводит результатом поле (Varchar 100) из таблицы - это поле не помещается в объект "Текст", выдается ошибка "BCDOverflow". Как избавиться от нее и вывести поле?
Уважаемый Serq! Дело в том, что я совсем недавно общаюсь с FR и еще меньше с версией 3.19. Я не могу найти обьект "DBGrid", соответсвенно не могу воспользоваться Вашим бесценным советом! Вы бы не могли пояснить - как вывести результат запроса в виде DBGrid?
Зараннее благодарен!
Я нигде не нашел рекомендаций по созданию TDBGrid в FR. Если Вы имеете в виду, что надо проверить дееспособность запроса - то она в норме - просто я проверял его на базе. А вот как делать то, что Вы написали - не знаю, просто я с FR работаю как пользователь, а не как программист. А как пользователь я вижу только возможности вывести результаты поиска в поле "Текс", "Вложенный отчет" (но опять же "Текс"), в общем, наверное это грустно, но я не понимаю как это проверять, а главное что делать с описанной проблемой.
Я нигде не нашел рекомендаций по созданию TDBGrid в FR. Если Вы имеете в виду, что надо проверить дееспособность запроса - то она в норме - просто я проверял его на базе. А вот как делать то, что Вы написали - не знаю, просто я с FR работаю как пользователь, а не как программист. А как пользователь я вижу только возможности вывести результаты поиска в поле "Текс", "Вложенный отчет" (но опять же "Текс"), в общем, наверное это грустно, но я не понимаю как это проверять, а главное что делать с описанной проблемой.
Свяжитесь с разработчиками вашей прикладной системы, использующей FastReport. У них то наверняка есть Delphi или C Builder, в которых и водится зверь по имени TDBGrid.
Свяжитесь с разработчиками вашей прикладной системы, использующей FastReport. У них то наверняка есть Delphi или C Builder, в которых и водится зверь по имени TDBGrid.
Спасибо большое за совет, чуть раньше прочитанного дошло, что надо разработчиков "за горло подержать", вот пытаюсь, пока ничего... Не признаются.
=================================================== Description
I assume Oracle sends 38 significant digits for its numbers.
If you have a select-statement including a quotient like "sum(a_field)/123 a_value" or a "avg(a_field) avg_value" the function NormalizeBcdData in SqlExpr.pas raises "DatabaseError(SBcdOverflow)".
This error is due to MaxFMTBcdDigits = 32.
You can test it with the attached project. It uses the round function to demonstrate the problem:
Ok: SELECT round(4/3,31) ZAHL from dual
Overflow: SELECT round(4/3,32) ZAHL from dual
It would be nice if DBExpress would handle this Oracle-caused-Problem, because its not so easy to recognize the "overflow" in data like 1.33333...
Steps to Reproduce:
1. Open the project BcdOverflow.dpr
2. point con (TSQLConnection) to a valid oracle-connection (Params:DataBase=xxxx, Password=xxxx, User_Name=xxxx)
3. start the project
4. you see 1.3333333 in the TDBGrid
5. change the SpinEdit-value from 31 to 32
6. BcdOverflow raises.
Workarounds
For all quotients or average use a round that results in less then 32 significant digits.
Round(..,20) should be quite enough.
Комментарии
Для подтверждения этого, отобразите результат запроса в таблице DBGrid
Вот что нашел по этому поводу.
Зараннее благодарен!
Under Oracle division-expressions (i.e. avg) results in BcdOverflow.
===================================================
Description
I assume Oracle sends 38 significant digits for its numbers.
If you have a select-statement including a quotient like "sum(a_field)/123 a_value" or a "avg(a_field) avg_value" the function NormalizeBcdData in SqlExpr.pas raises "DatabaseError(SBcdOverflow)".
This error is due to MaxFMTBcdDigits = 32.
You can test it with the attached project. It uses the round function to demonstrate the problem:
Ok: SELECT round(4/3,31) ZAHL from dual
Overflow: SELECT round(4/3,32) ZAHL from dual
It would be nice if DBExpress would handle this Oracle-caused-Problem, because its not so easy to recognize the "overflow" in data like 1.33333...
Steps to Reproduce:
1. Open the project BcdOverflow.dpr
2. point con (TSQLConnection) to a valid oracle-connection (Params:DataBase=xxxx, Password=xxxx, User_Name=xxxx)
3. start the project
4. you see 1.3333333 in the TDBGrid
5. change the SpinEdit-value from 31 to 32
6. BcdOverflow raises.
Workarounds
For all quotients or average use a round that results in less then 32 significant digits.
Round(..,20) should be quite enough.
===================================================