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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2012, 21:38   #1
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
Вопрос Query глючит при значениях с запятой

Здравствуйте!
Такая тупая проблема аж слов нету, есть некий Query в БД типа insert/update вида:
DBQuery.SQL.Text:='update TABLE set SUMM='+FloatToStr(Dataset.FN('SUMM' ).Value);
Тип значения SUMM пробовал Float и Currency. Конвертацию пробовал FloatToStr и CurrencyToStr и просто FN().AsSrtring.
Если значение SUMM целое (нет цифр после запятой), то всё пашет. Если дробное - выкидывает с ошибкой, что Query.SQL непонятный.
Как это обычно решается ???
delphicoding вне форума Ответить с цитированием
Старый 23.03.2012, 21:55   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вариант 1 - сделать параметризированный запрос
Вариант 2 - знак отделения дробной части от целой не такой, как хочется СУБД
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.03.2012, 22:07   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Согласен.
Попробуй перед этим оператором пропиши DecimalSeparator:='.';
Или действительно параметризируй запрос.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.03.2012, 23:10   #4
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Обычно делаю параметры, но в данном случае нужна строка SQL, тк в одной Query SQL строки постоянно меняются.
delphicoding вне форума Ответить с цитированием
Старый 24.03.2012, 12:29   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

у меня тоже SQL постоянно меняется и в неm (о ужас) меняется и число параметров и их именование.
после того как запрс записан в нем сразу же можно искать (parameterbyname) параметры, главное знать что надо найти. а можно даже еще проверять есть ли такой параметр.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 24.03.2012 в 12:32.
evg_m на форуме Ответить с цитированием
Старый 24.03.2012, 13:17   #6
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Цитата:
у меня иоже SQL постоянно меняется и в неm (о ужас) меняется и число параметров и их именование.
после того как запрс записан в нем сразу же можно искать (parameterbyname) параметры, главное знать что надо найти. а можно даже еще проверять есть ли такой параметр.
А разве можно в качестве параметра передавать варианты insert/update/delete? :D
Цитата:
Сообщение от Stilet Посмотреть сообщение
Согласен.
Попробуй перед этим оператором пропиши DecimalSeparator:='.';
Или действительно параметризируй запрос.
Пашет, ура! Спасибо!
delphicoding вне форума Ответить с цитированием
Старый 24.03.2012, 13:19   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если уж DecimalSeparator изменили, то или восстановите его исходное значение, или имейте вввиду, что и в других местах проги разделителем теперь будет считаться точка, а не запятая

ADD

Такой подход чреват тем, что если в настройках СУБД есть возможность изменения символа разделителя и его изменят, то ваша прога мигом перестанет работать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.03.2012 в 13:24.
Аватар вне форума Ответить с цитированием
Старый 24.03.2012, 14:50   #8
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
Если уж DecimalSeparator изменили, то или восстановите его исходное значение, или имейте вввиду, что и в других местах проги разделителем теперь будет считаться точка, а не запятая
Можно перед запросом заменять разделитель на DecimalSeparator, чтобы не забывать потом вернуть его на исходный
Код:
function fun(s: string): string;
begin
  Result := StringReplace(s, '.', DecimalSeparator, [rfReplaceAll]);
  Result := StringReplace(s, ',', DecimalSeparator, [rfReplaceAll]);
end;

//и далее

DBQuery.SQL.Text := 'update TABLE set SUMM=' + fun(Dataset.FN('SUMM').Text);
Способ, конечно, идиотский, но зато должен работать в любых условиях.

Цитата:
Такой подход чреват тем, что если в настройках СУБД есть возможность изменения символа разделителя и его изменят, то ваша прога мигом перестанет работать
Ну, мы же сами программисты и должны знать какой разделитель в БД установлен (точнее, сами его устанавливаем)
_SERGEYX_ вне форума Ответить с цитированием
Старый 24.03.2012, 14:59   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
точнее, сами его устанавливаем
Далеко не во всех организациях и не всегда так
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
построить несколько графиков параметрически заданной функции при разных значениях констант а, b, λ. Оси графика – х и y, Antonxxx007 Помощь студентам 0 01.12.2011 17:03
Вычислить значение функции при заданных значениях параметров Lordi1289 C++ Builder 1 15.06.2011 22:19
Ошибка при редактировании в Query Toky БД в Delphi 8 14.12.2009 16:42
Выделение цветом при определенных значениях Умпут Microsoft Office Excel 1 04.11.2009 20:58