Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.054 c
2-1157092172
Delphi basic
2006-09-01 10:29
2006.09.24
Неправильно рассчитываюся выражения в SQL


2-1157365735
Calibr
2006-09-04 14:28
2006.09.24
Zoom?


2-1157623176
Уч
2006-09-07 13:59
2006.09.24
Получить начало и конец дня


15-1157430752
Pazitron_Brain
2006-09-05 08:32
2006.09.24
E-mail - SMS


15-1157346728
Тыгыдым
2006-09-04 09:12
2006.09.24
DLL не работает :(





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский