Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.01.2016, 00:57
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Чтение и запись FLOAT

Такая проблемкка:
Есть поле в базе с плавающей запятой (FLOAT). Инфа в ней отображается с точкой. Когда я вывожу инфу на форму в string вместо точки отображается запятая и походу изза этого я не могу выполнить StrToFloat
Напрямую с поля Float в другую базу в поле Float данные тоже записать не могу. Помогите плиз

Код:
summ:= InputBox(match.Caption+' - '+label1.Caption, 'Óêàæèòå ñóììó ñòàâêè:', '0');
  sql_bet.SQL.Clear;
 sql_bet.SQL.Add('INSERT INTO `tour_'+ Form4.sql1.fieldbyname('id').AsString +'` (`user`, `bet_id`, `data`, `liga`, `team1`, `team2`, `bet`, `kf`, `summ`) VALUES ("'+form1.ZQuery1.fieldbyname('userid').AsString+'", "'+form4.sql2.fieldbyname('id').AsString+'", "'+time_text+'", "'+form4.sql2.fieldbyname('liga').AsString+'", "'+form4.sql2.fieldbyname('team1').AsString+'", "'+form4.sql2.fieldbyname('team2').AsString+'", "'+Form5.Label1.Caption+'", "+Form4.sql2.fieldbyname(p1)+", "'+summ+'")');
  sql_bet.ExecSQL;
Ответить с цитированием
  #2  
Старый 11.01.2016, 00:58
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

проблемка именно с записью поля `kf` так как запрос хочет видеть только строку
Ответить с цитированием
  #3  
Старый 11.01.2016, 07:51
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

В любом модуле надо добавить две строки:
Код:
initialization              //1
  DecimalSeparator := '.';  //2
end.
Ответить с цитированием
  #4  
Старый 11.01.2016, 12:16
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vocabulary
В любом модуле надо добавить две строки:
Код:
initialization              //1
  DecimalSeparator := '.';  //2
end.

Куда именно их вставить?
Ответить с цитированием
  #5  
Старый 11.01.2016, 12:27
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от chellas88
Куда именно их вставить?
Да хоть прям перед самим запросом, вторую строчку про DecimalSeparator, или можно ещё StringReplase применить, как вариант чтоб настройки среды не сбивать
Ответить с цитированием
  #6  
Старый 11.01.2016, 12:32
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Код:
 sql_bet.SQL.Add('INSERT INTO `tour_'+ Form4.sql1.fieldbyname('id').AsString +'` (`user`, `bet_id`, `data`, `liga`, `team1`, `team2`, `bet`, `kf`, `summ`) VALUES ("'+form1.ZQuery1.fieldbyname('userid').AsString+'", "'+form4.sql2.fieldbyname('id').AsString+'", "'+time_text+'", "'+form4.sql2.fieldbyname('liga').AsString+'", "'+form4.sql2.fieldbyname('team1').AsString+'", "'+form4.sql2.fieldbyname('team2').AsString+'", "'+Form5.Label1.Caption+'", "'+Form4.sql2.fieldbyname('p1').AsString+'", "'+summ+'")');
Помогите с этим запросом. Никак не могу записать значение с точкой в базу. Какое бы значение не передавалось в базу пишется 1.0
Ответить с цитированием
  #7  
Старый 11.01.2016, 12:37
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Да хоть прям перед самим запросом, вторую строчку про DecimalSeparator, или можно ещё StringReplase применить, как вариант чтоб настройки среды не сбивать

ругается на initialization**
Ответить с цитированием
  #8  
Старый 11.01.2016, 12:41
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Распишу подробнее что не получается.
1. Вытаскиваю из БД значения в Decimal типа 1.88 и показываю эти значения на кнопках.
2. При нажатии одной из кнопки ее значение должно передаться в другую таблицу тоже в Decimal, но именно это не выходит.

Подскажите решение
Ответить с цитированием
  #9  
Старый 11.01.2016, 12:51
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Реально не записывалось изза разных знаков разделения. Поменял на точку и получилось. Спасибо
Ответить с цитированием
  #10  
Старый 11.01.2016, 12:51
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
ругается...
В начале процедуры просто вставьте
Код:
...
begin
DecimalSeparator := '.';
...
Цитата:
Вытаскиваю из БД значения в Decimal типа 1.88 и показываю эти значения на кнопках... При нажатии одной из кнопки ее значение должно передаться в другую таблицу тоже в Decimal...
Может проще в тексте хранить значения, а вычисления производить посредством StrToFloat/FloatToStr?
Ответить с цитированием
  #11  
Старый 11.01.2016, 13:07
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
В начале процедуры просто вставьте
Код:
...
begin
DecimalSeparator := '.';
...
Может проще в тексте хранить значения, а вычисления производить посредством StrToFloat/FloatToStr?

тоже думал, но возникли проблемки с strtofloat
Ответить с цитированием
  #12  
Старый 11.01.2016, 14:32
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Цитата:
Куда именно их вставить?
В конце каждого модуля есть слово end. (с точкой в конце).
Перед этим словом и надо вставить эти две строки. Из приведенного фрагмента это более чем понятно:
Код:
initialization              //1
  DecimalSeparator := '.';  //2
end.
Код, который находится в секции initialization выполняется в первую очередь, еще до того как будут созданы формы.
Поэтому замещение разделителя целой и дробной частей числа будет действовать сразу же после запуска программы.

Цитата:
чтоб настройки среды не сбивать
Замещение это действует только в пределах запущенной программы. О возмущении никакой среды и речи быть не может.
Ответить с цитированием
Этот пользователь сказал Спасибо Vocabulary за это полезное сообщение:
chellas88 (11.01.2016)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter