Firebird конфликт точки и запятой

Vako
Дата: 12.07.2012 19:52:42
Здравствуйте,
Возникла тупая ситуация конфликта формата числа с дробной частью (типа currency 0,00).
1. Все суммы отправленные из программы в БД FB2.5 в IBExpert отображаются с разделением через запятую.
2. В программе все данные которые отправлены в БД и получены из БД с разделением через запятую обрабатываются правильно.
3. В БД есть одна ХП которая получая blob-string разбивает на таблицу чисел "summa" типа decimal/numeric - только в этой ХП возникает конфликт - не хочет обрабатывать разделитель запятая ","! С разделителем дробной части точка "." работает правильно, но данные то все с запятой! [summa=str [string], то есть [summa='0,00'] вызывает ошибку, а [summa='0.00'] работает ок].
4. Пробовал разные варианты CAST, например [summa=cast(str as decimal)] итп, всё равно ошибка.
5. Нашёл вот такой замечательный совет: http://www.cyberforum.ru/ado-net/thread234405.html - но он тут не работает тк в FB нет функции str(), а [summa=cast(str as char)] или [summa=cast(cast(str as decimal) as char)] итп также вызывают ошибку.

Вопросы:
А) Как решить проблему? Как заставить ХП воспринимать строки вида "0,00" с разделителем запятой как Decimal?
Б) В каком формате правильно хранить числа в БД - с разделением запятой "," или точкой "."? (имеются ввиду не только числовые поля, но и поля типа string,blob,итп)
Гаджимурадов Рустам
Дата: 12.07.2012 19:55:17

Сервер не знает про точки и запятые,
у него их нет, у него есть тип Double.
Про точки и запятые знает клиент.

Posted via ActualForum NNTP Server 1.5

Vako
Дата: 12.07.2012 19:59:43
И ???

Специально для невнимательных дописал: "(имеются ввиду не только числовые поля, но и поля типа string,blob,итп)"
Гаджимурадов Рустам
Дата: 12.07.2012 20:08:15

Vako> И ???

Что и? Книжки читаете.

Специально для невнимательных и непонятливых.

> А) Как решить проблему? Как заставить ХП воспринимать
> строки вида "0,00" с разделителем запятой как Decimal?

Сделать Replace данных или строк внутри ХП.

> Б) В каком формате правильно хранить числа в БД - с разделением

Числа в БД надо хранить в двочином виде. Аминь.
Соответственно, строковые и пр. поля - переделать.

> запятой "," или точкой "."? (имеются ввиду не только
> числовые поля, но и поля типа string,blob,итп)

В клинических случаях (покуда нет обоснования необходимости
использования строк и БЛОБов для хранения) - использовать ".".

Posted via ActualForum NNTP Server 1.5

arni
Дата: 12.07.2012 20:08:59
README.builtin_functions.txt
-------
REPLACE
-------

Function:
REPLACE(searched, find, replacement) replaces all occurences of "find"
in "searched" by "replacement".

Format:
REPLACE( <string>, <string>, <string> )

Example:
select replace(x, ' ', ',') from y;
Vako
Дата: 12.07.2012 20:23:42
>> Сделать Replace данных или строк внутри ХП.

Очевидно, но это по-школьному как-то. :D

>> Числа в БД надо хранить в двочином виде. Аминь.

Канесьна, насяльника.

>>> В клинических случаях (покуда нет обоснования необходимости
>> использования строк и БЛОБов для хранения) - использовать ".".

Тут и так и сяк гемор - либо в программе при получении и отправке чисел ввиде строк разбирать и переделывать "." на "," иначе все визуальные объекты не понимают что за число. Либо в одной этой ХП переделывать "," на "." - лучше уж хранить с "," и переделывать в одной ХП...
Гаджимурадов Рустам
Дата: 12.07.2012 20:27:12

> Очевидно, но это по-школьному как-то. :D

Ну так школьникам школьные методы, что ж ты хотел.

> Канесьна, насяльника.

Не надо меня насяльником называть. Если бы я был вашим
насяльником - уволил бы того, кто это придумал. Скорее всего.

> Тут и так и сяк гемор - либо в программе при получении
> и отправке чисел ввиде строк разбирать и переделывать "." на ","

Я бы не назвал это гемором. И откройте для себя FormatSettings.

> иначе все визуальные объекты не понимают что за число.

Серьезно что ли?!

> Либо в одной этой ХП переделывать "," на "." -
> лучше уж хранить с "," и переделывать в одной ХП...

Это просто ппц какой-то, в примеры "как делать нерпавильные выводы" прямо.

Posted via ActualForum NNTP Server 1.5

Гаджимурадов Рустам
Дата: 12.07.2012 20:29:43

> Я бы не назвал это гемором. И откройте для себя FormatSettings.

В принципе, OnGetText (и OnSetText опционально) - туда же.

Posted via ActualForum NNTP Server 1.5

Dimitry Sibiryakov
Дата: 12.07.2012 20:44:56

Vako
Специально для невнимательных дописал: "(имеются ввиду не только числовые поля, но и поля
типа string,blob,итп)"

В полях типа string хранятся строки. Строки это не числа.
В полях типа blob хранятся неструктурированные двоичные данные.

Posted via ActualForum NNTP Server 1.5

vvm
Дата: 12.07.2012 21:28:15
А у нас в программах всегда точка отображается. И в отчетах точка печатается.
А то что там эксель с ибэкспертом под локаль подстаривается, нам все равно.
И ни один юзер ни разу по этому поводу. И даже если бы, то все равно нас хрен заставишь.
Вот так вот.