Главная страница
    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.033 c
3-1153830575
infom
2006-07-25 16:29
2006.09.24
СУБД с возможностью создания перекресных запросов.


15-1156343106
TUser
2006-08-23 18:25
2006.09.24
Каковы причины Первой Мировой Войны?


2-1157113951
vodvorezlaya
2006-09-01 16:32
2006.09.24
Помогите с преобразованием типов данных


2-1157365340
Sherhan
2006-09-04 14:22
2006.09.24
Слежение за памятью видео карты


2-1157350865
vegarulez
2006-09-04 10:21
2006.09.24
По поводу фискальных регистраторов.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский