Точка при в воде TFLoatField

Basketbol
Дата: 21.09.2019 12:24:00
Добрый день!
Столкнулся с примитивщиной, но не могу решить)))
Есть таблица SQLite
В ней есть поле Real. Ставил тип и Real и Double
Работаю через FireDAC.
Есть стандартный контрол TDbEdit
Проблема:
Контрол не позволяет ввести точку.
Но при этом позволяет ввести запятую.
Экспериментировал с полями TFloatField EditFormat и DisplayFormat.
Ставил
"###,##0.0#"
"0.0"
"##.##"
+другие варианты
+просто очищал эти поля

Ничего не помогает - точка не вводится, запятая вводится. Хоть ты тресни.
Когда ты пишешь запятую и сохраняешь - вылетает исключение "is not Floating point value"
Ну и в принципе - все таки принято отделять дробную часть точкой ....
Куда можно покопать?
Dimitry Sibiryakov
Дата: 21.09.2019 12:57:44

Basketbol
в принципе - все таки принято отделять дробную часть точкой ....
Куда можно покопать?

Дробную часть принято отделять десятичным разделителем, который пользователь установил в
настройках системы. Если он захочет точку - будет точка. Захочет запятую - будет запятая.
Захочет тире - будет тире. Дело программиста ему это разрешить, а не прогибать под свои
"принципы".

Posted via ActualForum NNTP Server 1.5

Basketbol
Дата: 21.09.2019 13:10:21
При создании ДатаМодуля у меня написано
FormatSettings.DecimalSeparator := '.';

Но это тоже никак не влияет на решение моей проблемы.
Dimitry Sibiryakov
Дата: 21.09.2019 13:18:54

Basketbol
это тоже никак не влияет на решение моей проблемы.

Вполне вероятно, что это её и создаёт.

Posted via ActualForum NNTP Server 1.5

Basketbol
Дата: 21.09.2019 14:00:52
Dimitry Sibiryakov,
нее
Убирал эту строку, менял на FormatSettings.DecimalSeparator := ',' - вообще никак не влияет.
...
Первый раз с таким поведением встречаюсь...
GrigoriyFomin
Дата: 21.09.2019 14:39:45
Basketbol,

точка принята как десятичный разделитель лишь в странах СНГ, мож еще в Европе. А вообще тока или запятая прописана в языковых настройках винды, возможно оттуда берет десятичный разделитель дбедит, игнорирую программную правку через десималсепаратор. и кстати, неумение принять запятую как разделитель - это проблема базы, раз она не берет это значение из системы.
Basketbol
Дата: 21.09.2019 15:13:44
GrigoriyFomin, база (sqlite) то принимает. Т.е. если зайти в таблицу SQLite менеджером - то можно хоть точку, хоть запятую.
...
Только что что то тыкал - на запятую перестал ругаться. Уже прогресс, но хочецца все таки точку увидеть вместо запятой))
...
UPD. Разобрался. Действительно - разделитель берется из региональных настроек. И видимо где то жестко прописана эта связь.
Получается путаница - ибо когда я в displayFormat и editFormat пишу ##.## - я ожидаю видеть именно точку как разделитель.
Исправил в региональных настройках разделитель на точку - все получилось.
Basketbol
Дата: 21.09.2019 15:23:27
Это все называется "когда с delphi 7 переехал на delphi Tokyo" )))
YuRock
Дата: 21.09.2019 16:57:20
GrigoriyFomin
и кстати, неумение принять запятую как разделитель - это проблема базы, раз она не берет это значение из системы.
Ну подскажи мне базу, которая "умеет" такое:

insert into t(a,b,c) values(1,25,1,44,5)


Базы тут вообще не при чем. С любой базой надо работать через параметры, а там проблемы нет и быть не может.
Dimitry Sibiryakov
Дата: 21.09.2019 18:09:26

YuRock
С любой базой надо работать через параметры, а там проблемы нет и быть не может.

Может. Чайники умудряются биндить строку в значение любого парамера. Включая конструкцию
"in (?)". А потом удивляются как это оно не работает.

Posted via ActualForum NNTP Server 1.5