Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

разделитель   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
15-1157380134
DevilDevil
2006-09-04 18:28
2006.09.24
Загрузка Dll из ресурса


8-1141312872
MAXLMN
2006-03-02 18:21
2006.09.24
Flash(swf) to Bitmap


15-1157113395
Квэнди
2006-09-01 16:23
2006.09.24
Новый форум


9-1112300436
Pa5ha
2005-04-01 00:20
2006.09.24
Вопросы по OpenGL


4-1148470794
Nostradamus
2006-05-24 15:39
2006.09.24
моя DLL подгружается другими приложениями