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

Вниз

Перемножить и вставить в БД   Найти похожие ветки 

 
Artemij ©   (2003-12-04 14:13) [0]

В БД есть 2 поля - сумма и НДС от этой суммы (формат обоих - Currency). Как рассчитать НДС и записать его значение в БД? Я пробовал следующим путем (вызываю действие после выхода из DBEdit (OnExit), в который вводится сума):
Table1Field_NDS.Value := StrToFloat(DBEdit_Summa.Text) * 0.20;
После того, как ввожу сумму и выхожу из DBEdit, вылетает ошибка:
вводимая сумма is not a valid floating point value.
Что делать?


 
Семен Сорокин ©   (2003-12-04 14:20) [1]

Делай это на OnBeforePost


 
Рамиль ©   (2003-12-04 14:22) [2]

Вместо StrToFloat(DBEdit_Summa.Text) лучше Table1FieldSumma.Value в событии AfterPost.
А ошибка из за не совпадения DecimalSeparator


 
Johnmen ©   (2003-12-04 14:22) [3]

1. В поле едита неверный формат числа с пл.точкой
2. А почему 0.20 константа ???


 
Рамиль ©   (2003-12-04 14:24) [4]


> 2. А почему 0.20 константа ???

Видимо курсовая;)


 
Alex_Bredin ©   (2003-12-04 14:27) [5]

в таблице нет смысла хранить данные, которые можно получить вычислением


 
Artemij ©   (2003-12-04 14:29) [6]


> 2. А почему 0.20 константа ???

Это я для примера. Потом будет как надо.


 
Danilka ©   (2003-12-04 14:29) [7]

[5] Alex_Bredin © (04.12.03 14:27)
эт ты так про НДС?
ну-ну, желаю удачи. :))


 
Рамиль ©   (2003-12-04 14:29) [8]

...
> Alex_Bredin © (04.12.03 14:27) [5]

согласен.
Правильнее будет хранить как раз ставку НДС, которая отнюдь не константа


 
stone ©   (2003-12-04 14:31) [9]


> StrToFloat(DBEdit_Summa.Text)


Это такой новый способ представления числовых типов данных?


 
Alex_Bredin ©   (2003-12-04 14:31) [10]


> 2. А почему 0.20 константа ???

с НГ ваша программа накроется медным тазом


 
Artemij ©   (2003-12-04 14:31) [11]


> Alex_Bredin © (04.12.03 14:27) [5]

Мне потом надо делать поиск по величине НДС.


 
Artemij ©   (2003-12-04 14:36) [12]


> Это такой новый способ представления числовых типов данных?

А как?


 
Alex_Bredin ©   (2003-12-04 14:38) [13]


>
> > Alex_Bredin © (04.12.03 14:27) [5]
>
> Мне потом надо делать поиск по величине НДС.

ничто не мешает делать поиск по сумме*ставку НДС

хотя с НДС все не так просто,тут контролируемая избточность может быть полезна(но не для поиска)


 
Artemij ©   (2003-12-04 14:38) [14]

Помогите на конкретном примере, пожалуйста.


 
Artemij ©   (2003-12-04 14:42) [15]

События OnBeforePost и OnAfterPost не годятся, т.к. НДС сумму надо видеть сразу на форме для ввода новой записи.


 
Nikolai_S ©   (2003-12-04 14:47) [16]

procedure ReplaceChar(var s: string; OldChar, NewChar: char);
var
i, L: integer;
begin
L := Length(s);
for i := 1 to L do
if s[i] = OldChar then s[i] := NewChar;
end;


.....
var
s: string;
...
s := DBEdit_Summa.Text;
// Далее заменяем в строке s все точки и запятые на константу DecimalSeparator:

ReplaceChar(s, ",", DecimalSeparator);
ReplaceChar(s, ".", DecimalSeparator);

//а далее как и было:

Table1Field_NDS.Value := StrToFloat(s) * 0.20;


Еще бы не мешало проверять DBEdit_Summa.Text на предмет того, что ввели именно положительное вещественное или целое число, а не текст.


 
Artemij ©   (2003-12-04 15:55) [17]

Я понял в чем ошибка - поскольку в таблице формат поля "Сумма" Currency, то в результате DBEdit_Summa.Text помимо числа появляется и денежная единица. Как мне быть? Убирать руб. из текста DBEdit (как это делается) или по-другому?


 
Sandman25 ©   (2003-12-04 15:58) [18]

[16] Nikolai_S © (04.12.03 14:47)

Есть стандартная функция StringReplace.


 
Silver Alex ©   (2003-12-04 16:17) [19]


> Убирать руб

можно посмотреть DisplayFormat.
I>
> в таблице нет смысла хранить данные, которые можно получить
> вычислением


> Правильнее будет хранить как раз ставку НДС, которая отнюдь
> не константа

может и правильней,но как показывает практика лучше все таки хранить само значение с НДС<


 
Johnmen ©   (2003-12-04 16:21) [20]

>Artemij © (04.12.03 15:55)
>или по-другому?

Смотри на него, как на Float.


 
Sandman25 ©   (2003-12-04 16:21) [21]

Мы вообще храним и ставку, и сумму НДС. Ставка нужна для отчетов по ставке (при расчетах получается ставка = 19..21 вместо 20. Сумма НДС нужна для борьбы с погрешностью округлений. Да и просто быстрее отчеты получаются.


 
Artemij ©   (2003-12-04 16:48) [22]

Решил проблему через delete(s,..,..). Примитивно, но зато работает.


 
Silver_ ©   (2003-12-04 19:00) [23]

CurrencyToComp(Value: Currency; var Result: Comp);
Comp –2^63+1 .. 2^63 –1

> Мы вообще храним и ставку, и сумму НДС.

Прислушайся к

> Рамиль © (04.12.03 14:29) [8]
> ...
> > Alex_Bredin © (04.12.03 14:27) [5]
>
> согласен.
> Правильнее будет хранить как раз ставку НДС, которая отнюдь
> не константа


и исполизуй Вычисляимое поле

> Мне потом надо делать поиск по величине НДС.

при использовании Вычисляемого поля этот вопрос отпадет сам собой



Страницы: 1 вся ветка

Текущий архив: 2003.12.30;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
1-99529
чайник
2003-12-16 14:38
2003.12.30
Ошибка класса EDatabaseError


1-99554
Cyberjack
2003-12-18 02:55
2003.12.30
Интерфейс MDI


14-99757
Rafe
2003-12-07 02:46
2003.12.30
Сайт для он-лайн слежкой за результатами выборов...


1-99535
MPS
2003-12-16 13:36
2003.12.30
Как получить значение sin в градусах?


1-99533
man
2003-12-16 11:41
2003.12.30
помогите с инст. пакетом