Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

разделитель


zdm ©   (2006-09-07 09:54:00) 

Всем привет,,, ест БД-FireBird, пишу прогу на D7, вообщем в окошке ввода суммы платежа вводится-соответственно сумма, и в зависимости от получателя расчитывается коммисия,,, ну допустим ввел сумму 15300- при коммиссии 0,5% итог 15376,5,,, запрос такой
insert into pay
   (
   id
   ,id_client
   ,id_payer
   ,id_recipient
   ,id_cashier
   ,lch
   ,bar_code
   ,summ
   ,comission
   ,total_sum
   ,date_pay
   ,time_pay
   ,NAZNACH
   ,ID_NIGHT
   )
VALUES
   (4034
    ,1575
    ,1025
    ,2
    ,2
    ,'www'
    ,'eee'
    ,'15300'
    ,'76,5'
    ,'15376,5'
    ,'07.09.2006'
    ,'9:25:43'
    ,'За обучение в МАИ'
    ,'0'
   )
Не вникаейте в запрос,,, дело в том , что если я вставляю не '15376 ,5',а '15376 .5' то все нормально, а если через ' ,', то данные тоже вносятся, но со значением на порядок больше,,, т.е. комиссия не 76,5 а 765 и итог не 15376,5 а 153765, ну понятно что дело в разделителе, но d7 при StrToFloat делает именно ',' как быть..????


zdm   (2006-09-07 12:18:00) [1]

да нет конечно, она приводит только запрос к виду понятному дэлфи, а дальше естественно уже ручками
хоть SQL.Add(' ,'+IntToStr(id_payers));а хочешь пиши
:id_payers
Хотя надо кодик подправить....... Ладно ухожу, мысли появились....


Sergey13   (2006-09-07 12:01:00) [2]

> [9] zdm ©   (07.09.06 11:54)

И программулька сама вставляет
SQL.Add(' , '+IntToStr(id_payers));
?
Лучше бы вставляла :id_payers 8-)


zdm   (2006-09-07 11:54:00) [3]

кстати очень удобно, если кому нужна програмулька, могу кинуть на мыло..


zdm   (2006-09-07 11:48:00) [4]

Дело в том, что я использую, для Oracle--pl/sql developer, а для FireBird IB Expert,, там пишу кучу строк,, выравниваю как мне удобно для читабильности, потом копирую текст и потом кидаю текст в програмку, которую сам написал, которая переводит содержимое типа

Select
  id,
  name
From
 table
Where
 name=''
ну и т.д в вид

SQL.Add('Select');
SQL.Add('   id,');
SQL.Add('   name');
SQL.Add('From');
SQL.Add('  table');
SQL.Add('Where');
SQL.Add('  name=''');
и спокойно кидаю это в Delphi


StriderMan   (2006-09-07 11:30:00) [5]


> SQL.Add(

не проще все написать одним текстовым блоком?
SQL.Text := '...'

а то запрос совершенно нечитабельный


zdm   (2006-09-07 10:44:00) [6]

С параметрами все работает....
with DataModule1.ADOQuery_Insert do
begin
sql.Clear;
SQL.Add('insert into pay');
SQL.Add(' (');
SQL.Add(' id');
SQL.Add(' ,id_client');
SQL.Add(' ,id_payer');
SQL.Add(' ,id_recipient');
SQL.Add(' ,id_cashier');
SQL.Add(' ,lch');
SQL.Add(' ,bar_code');
SQL.Add(' ,summ');
SQL.Add(' ,comission');
SQL.Add(' ,total_sum');
SQL.Add(' ,date_pay');
SQL.Add(' ,time_pay');
SQL.Add(' ,NAZNACH');
SQL.Add(' ,ID_NIGHT');
SQL.Add(' )');
SQL.Add('VALUES');
SQL.Add(' ('+IntToStr(DataModule1.ADOQuery_TMP.Fields[0].AsInteger+1));
SQL.Add(' ,'+IntToStr(id_client));
SQL.Add(' ,'+IntToStr(id_payers));
SQL.Add(' ,'+IntToStr(id_recipient));
SQL.Add(' ,'+IntToStr(id_cashier));
SQL.Add(' ,'+QuotedStr('www'));
SQL.Add(' ,'+QuotedStr('eee'));
SQL.Add(' ,:summa');
SQL.Add(' ,:comiss');
SQL.Add(' ,:itog');
SQL.Add(' ,'+QuotedStr(DateToStr(now)));
SQL.Add(' ,'+QuotedStr(TimeToStr(now)));
SQL.Add(' ,'+QuotedStr(Memo_Naznach.Text));
SQL.Add(' ,'+QuotedStr('0'));
SQL.Add(' )');
ParamByName('summa').AsFloat:=StrToFloat(Edit_Sum.Text);
ParamByName('comiss').AsFloat:=StrToFloat(Label_Sum_Comiss.Caption);
ParamByName('itog').AsFloat:=StrToFloat(Label_Sum_Itog.Caption);
ВСЕМ БОЛЬШОЕ СПАСИБО


StriderMan   (2006-09-07 10:10:00) [7]


> d7 при StrToFloat делает именно ','

не ',' а в соответствии с региональными настройками.

а нужно [1].1

при заполнении запроса через параметры типы данных форматируются так, как их понимает СУБД. В данном случае FB. Для FB разделитель всегда точка.


zdm   (2006-09-07 10:06:00) [8]

Причем в таблице получателей , где указана комиссия данные как-раз храняться с разделителем ','


zdm   (2006-09-07 10:05:00) [9]


> 4. Не хранить в БД то, что можно посчитать

Да прав, ты прав, но выхода другого пока нет


Sergey13   (2006-09-07 10:01:00) [10]

4. Не хранить в БД то, что можно посчитать


Sergey13   (2006-09-07 10:00:00) [11]

> как быть..????

1. Пользоваться параметрами в запросе.
2. Работать, по возможности, с компонентами, работающими с нужным типом данных
3. При преобразовании типов учитывать возможные ошибки


Наверх

Титульная страница Поиск, карта сайта Написать письмо