Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Внизразделитель Найти похожие ветки
← →
zdm © (2006-09-07 09:54) [0]Всем привет,,, ест БД-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 делает именно "," как быть..????
← →
Sergey13 © (2006-09-07 10:00) [1]> как быть..????
1. Пользоваться параметрами в запросе.
2. Работать, по возможности, с компонентами, работающими с нужным типом данных
3. При преобразовании типов учитывать возможные ошибки
← →
Sergey13 © (2006-09-07 10:01) [2]4. Не хранить в БД то, что можно посчитать
← →
zdm © (2006-09-07 10:05) [3]
> 4. Не хранить в БД то, что можно посчитать
Да прав, ты прав, но выхода другого пока нет
← →
zdm © (2006-09-07 10:06) [4]Причем в таблице получателей , где указана комиссия данные как-раз храняться с разделителем ","
← →
StriderMan © (2006-09-07 10:10) [5]
> d7 при StrToFloat делает именно ","
не "," а в соответствии с региональными настройками.
а нужно [1].1
при заполнении запроса через параметры типы данных форматируются так, как их понимает СУБД. В данном случае FB. Для FB разделитель всегда точка.
← →
zdm © (2006-09-07 10:44) [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 11:30) [7]
> SQL.Add(
не проще все написать одним текстовым блоком?
SQL.Text := "..."
а то запрос совершенно нечитабельный
← →
zdm © (2006-09-07 11:48) [8]Дело в том, что я использую, для 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
← →
zdm © (2006-09-07 11:54) [9]кстати очень удобно, если кому нужна програмулька, могу кинуть на мыло..
← →
Sergey13 © (2006-09-07 12:01) [10]> [9] zdm © (07.09.06 11:54)
И программулька сама вставляет
SQL.Add(" ,"+IntToStr(id_payers));
?
Лучше бы вставляла :id_payers 8-)
← →
zdm © (2006-09-07 12:18) [11]да нет конечно, она приводит только запрос к виду понятному дэлфи, а дальше естественно уже ручками
хоть SQL.Add(" ,"+IntToStr(id_payers));а хочешь пиши
:id_payers
Хотя надо кодик подправить....... Ладно ухожу, мысли появились....
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.059 c