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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 06:44   #1
masha_prog
 
Регистрация: 25.10.2011
Сообщений: 6
Вопрос Замена "," на "."

Доброе утро!
При формировании запроса SQL необходимо данные (вещественного типа) сравнивать с числом (вещественного типа).
в первом запросе вытягиваю число с которым необходимо будет сравнивать.запоминаю его в переменную.
во втором запросе происходит отбор в зависимости от этого числа.

Как сделать так что бы вещественное число запоминалось с "." (для использования в щапросе) а не с ","?
masha_prog вне форума Ответить с цитированием
Старый 15.02.2012, 07:58   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Объяви в своей программе, чтобы по умолчанию вещественное число разделялось точкой, вне зависимости от настроек Windows. Где нибудь в OnCreate
DecimalSeparator := '.';
Вот почитай про это http://www.delphibasics.ru/DecimalSeparator.php
FaTaL вне форума Ответить с цитированием
Старый 15.02.2012, 09:24   #3
masha_prog
 
Регистрация: 25.10.2011
Сообщений: 6
По умолчанию

Спасибо!! Совсем про этот момент забыла!
masha_prog вне форума Ответить с цитированием
Старый 16.02.2012, 08:54   #4
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

if Pos(',', Str1) > 0 then Str1[Pos(',', Str1)] := '.';

где str1 это число в текстовом формате. (тоесть в строке подразумевается всего 1 ",")
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 16.02.2012, 10:42   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Илья: Есть более гуманные методы
StringReplace(',', '.', Str);
Кажется такой формат, если нет - есть справка.

А вообще верный ответ уже дали
psycho-coder вне форума Ответить с цитированием
Старый 16.02.2012, 10:50   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Объяви в своей программе, чтобы по умолчанию вещественное число разделялось точкой, вне зависимости от настроек Windows.
Плохое решение. Пользователь не сможет вводить в программу числа, потому что он (вот наивный-то! ) будет пытаться ввести число через запятую - потому что это его настройки.

Лучшее решение - использовать TFormatSettings с фиксированными настройками и передавать его в функции вроде StrToFloat.

Ещё лучше - вообще не использовать строковое формирование запроса. Это крайне плохая практика. Особенно для текстовых данных. Просто используйте параметризированный запрос - а всё остальное сделает за вас код поддержки.

Цитата:
if Pos(',', Str1) > 0 then Str1[Pos(',', Str1)] := '.';
Цитата:
StringReplace(',', '.', Str);
Тогда уж менять DecimalSeparator на '.' - а то вдруг он не запятая.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.02.2012, 10:55   #7
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Плохое решение. Пользователь не сможет вводить в программу числа, потому что он (вот наивный-то! ) будет пытаться ввести число через запятую - потому что это его настройки.
В вопросе пользователь не вводит число, а оно берётся из БД, да даже если и вводит, то при StrToFloat оно всё равно превратиться в тот формат который указан в DecimalSeparator.
FaTaL вне форума Ответить с цитированием
Старый 16.02.2012, 11:22   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
В вопросе пользователь не вводит число, а оно берётся из БД, да даже если и вводит, то при StrToFloat оно всё равно превратиться в тот формат который указан в DecimalSeparator.
А я про что? В том-то и дело, что ты предлагаешь для решения локальной проблемы (интерфейс программа-БД) использовать глобальное решение (смена настроек профиля пользователя в программе).
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.02.2012, 11:40   #9
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Цитата:
А я про что? В том-то и дело, что ты предлагаешь для решения локальной проблемы (интерфейс программа-БД) использовать глобальное решение (смена настроек профиля пользователя в программе).
Ну это же только в этой программе, остальные программы на это никак не отреагируют и будут продолжать использовать виндовые настройки. Да ладно, что тут дискутировать. Пользователя ответ устроил решил его проблему, значит тему можно закрывать.
FaTaL вне форума Ответить с цитированием
Старый 16.02.2012, 12:04   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Ну это же только в этой программе, остальные программы на это никак не отреагируют и будут продолжать использовать виндовые настройки.
Не тормози.

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

Например, если в программе ("которая работает с БД") есть поле ввода какого-то числа (а если программа вставляет в БД какие-то числа, то даю 90% на то, что такое поле ввода будет и в интерфейсе программы), то это поле ввода будет использовать подменённый тобой разделитель - вопреки настройкам пользователя. Это - грубый плевок ему в лицо.

Вот почему я указал, что разделитель нужно менять местно - только для необходимых операций: через TFormatSettings.

Цитата:
Да ладно, что тут дискутировать. Пользователя ответ устроил решил его проблему, значит тему можно закрывать.
Не стоит упускать возможности предостеречь человека от удара молотком по пальцу.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04