Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Авторасчет [D5, Paradox]


Denizzz ©   (2003-09-17 12:04:00) 

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


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

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


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

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


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

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


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

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

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


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

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


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

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


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

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


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

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

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


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

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

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

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


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

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


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

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


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

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


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

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

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


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

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


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо