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

Вниз

Авторасчет   Найти похожие ветки 

 
Denizzz   (2003-09-17 12:04) [0]

Первый раз столкнулся с необходимостью вычисления поля таблицы по данным полей этой же таблицы. Как это проще реализовать?
Например в идеальном варианте: Добавляем запись, заносим вес, цену и скидку, а сумма должна уже расчитаться автоматически.
Заранее благодарен.


 
Sandman25   (2003-09-17 12:08) [1]

PriceField.OnChange, AmountField.OnChange и DiscountField.OnChange вызывают перерасчет SumField.Value


 
Sandman25   (2003-09-17 12:08) [2]

Либо в триггере на Insert/Update, если СУБД позволяет.


 
Anatoly Podgoretsky   (2003-09-17 12:09) [3]

Расчетные поля, нажми правую кнопку на наборе и добавь поле.


 
Sandman25   (2003-09-17 12:11) [4]

[3] Anatoly Podgoretsky © (17.09.03 12:09)

Судя по его посту, ему нужно работать с настоящим полем БД.


 
Anatoly Podgoretsky   (2003-09-17 12:21) [5]

Тогда не соответствует нормализации. Лишнии данные, которые расчитываются. Но точно также их можно рассчитывать в момент записи или при каждом чихе.


 
Sandman25   (2003-09-17 12:23) [6]

Не соответствие нормализации не обязательно плохо. Например, если в таблицу триггерами записывается общая сумма по документу, что существенно ускоряет получение отчетов.


 
vopros   (2003-09-17 12:26) [7]

Если он такие вопросы задает, то надежнее ему вычисляемое поле сделать.Да и на парадоксе пишет он.


 
Denizzz   (2003-09-17 12:34) [8]

Спасибо за советы. Воспользовался OnChange - помогло, но сумма обновляется только когда встаешь на это поле.

> Тогда не соответствует нормализации. Лишнии данные, которые
> расчитываются.

К документу может принадлежать несколько записей (одна таблица - документы, другая - завязанная по коду документа и содержащая записи документов), и проще будет иметь доступ к уже готовым суммам базы.


 
Sandman25   (2003-09-17 12:42) [9]

>но сумма обновляется только когда встаешь на это поле.

Можно попытаться сделать TDBGrid.Invalidate или что-то подобное.
Я, правда, когда реализовывал что-то подобное, обрабатывал Datasource.OnDataChange, проблем с отображением там не было.


 
Denizzz   (2003-09-17 13:05) [10]

Благодарю, помогло.
На всякий случай: В документе Шапка это одна таблица, а в табличной части вносятся записи другой таблицы, связаной с первой. Как тогда реализовывается отмена сохранения документа (т.е. как сохраненные в кэш записи не сохранять)?
Обновляю записи принудительно (FlushBuffers).


 
Sandman25   (2003-09-17 13:10) [11]

Вы имеете в виду как отменять заведение нового документа?
Я шапку записывал только непосредственно перед тем, как записывать товары. Можно было это считать одной транзакцией, в некотором роде. Вообще-то я с Paradox уже давно не работал, многое подзабыл.


 
Denizzz   (2003-09-17 13:15) [12]

У меня выходит тоже самое:
Таблица с продукцией связана (MasterSource) с таблицей реквизитов документа. При записи нового товара автоматом присваивается значение индекса номера документа (по номеру связаны документ и продукция).
Как бы извернуться, чтобы при отмене ввода нового документа очищались соотв. записи в этих таблицах?


 
Sandman25   (2003-09-17 13:17) [13]

>Как бы извернуться, чтобы при отмене ввода нового документа очищались соотв. записи в этих таблицах?

Удалять вручную.


 
Denizzz   (2003-09-17 13:22) [14]

Этим и обхожусь.
Лишние действия (PackTable).


 
Sandman25   (2003-09-17 13:26) [15]

Не обязательно вызывать PackTable после каждого удаления.
Можно это делать при входе/выходе из программы.


 
sewer1   (2003-09-17 13:30) [16]

А почему нельзя сделать вычисляемое поле и воспользоваться onCalcFields?



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

Форум: "Базы";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
4-18669
dmtr
2003-07-29 11:33
2003.10.06
Создание окна на WinAPI


3-18235
Spawn
2003-09-15 15:24
2003.10.06
Проблема с InterBase


1-18335
fc_off
2003-09-23 17:05
2003.10.06
Позиция курсора в TEdit


14-18620
DProg
2003-09-17 17:10
2003.10.06
QuickReport->Word


6-18517
ilka
2003-08-07 16:17
2003.10.06
странные веши творятся с TClientSocket





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