![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
разделитель
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. При преобразовании типов учитывать возможные ошибки