Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.009 c
1-99557
Intro
2003-12-17 23:42
2003.12.30
Как подключить принтер?


6-99687
Kevinkf
2003-10-30 07:48
2003.12.30
Создание NAT и подсчет трафика


3-99434
Zhenja
2003-12-04 00:21
2003.12.30
Работа с локальной базой по сети


14-99790
Soft
2003-12-05 03:51
2003.12.30
В Athlon XP 2000 обнаружена ошибка при выполнении триг. операций.


1-99567
Spb
2003-12-17 08:57
2003.12.30
Проблема при записи в файл





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