![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Автокалькуляция в связанных таблицах [D6, dBase, FoxPro, Paradox]
Lord Vader © (2003-06-10 07:02:00)Имеется две связанные таблицы по типу "владелец-детали". Необходимо в первой таблице(владелец) в вычисляемое поле внести сумму всех значений из подчиненной таблицы(детали). Вот кусок моей программы:
procedure TMainForm.ROrderTableCalcFields(DataSet: TDataSet);
var
b:boolean;
sum:currency;
begin
//вычисляем сумму всех полей в таблице "детали"
sum:=0;
with RealizTable do
begin
b:=FindFirst;
while b do
begin
sum:=sum+fieldbyname("realiz").ascurrency;
b:=FindNext;
end;
end;
//обновляем данные для владельца
with rordertable do FieldByName("realiz").AsCurrency:=sum;
with rordertable do FieldByName("total").AsCurrency:=fieldbyname("kassa").ascurrency+fieldbyname("realiz").ascurrency;
end;
Но в итоге при добавлении, удалении строки в таблицу владельца или изменения данных выводятся некорректные значения в мое вычисляемое поле. Как сделать так, чтобы при OnCalcFields владельца DELPHI все ж обновлял связь с таблицей детали и правильно считал итог?
makdi (2003-06-10 09:39:00) [1]Согласен с Sergey13
Что тебе мешает написать запрос?
Select t.field, sum(t2.field)
from table1 t, table2 t2
where t.field1=t2.field2 //связываем таблицы между собой
group by t.field
И будет тебе счастье :)
Если не понял, то пиши.
VAleksey (2003-06-10 08:55:00) [2]OnCalcFields для этого не предназначен
Используй вычисление отдельной процедурой по кнопке или пересчитывай суммы после поста дочерней таблицы или используй квери, если таблички не очень большие.
Sergey13 (2003-06-10 08:55:00) [3]Если честно, то я не понимаю как это вообще работает. И вообще многое не ясно. Ты вычисляешь сумму по ВСЕЙ детальной таблице, или по фильтрованому набору? Что из себя представляют сами НД - таблицы или запросы, и как осуществляется отбор данных в детале? Данные мастер-таблицы в гриде или видна только одна запись?
>Но в итоге при добавлении, удалении строки в таблицу владельца
Каким макаром ты удаляешь/добавляешь в мастер таблицу?
>или изменения данных
Изменение каких данных в мастере может повлечь за собой изменение суммы по деталу?
Что можно посоветовать. Попоробуй отказаться от калк-полей и замени их на вычисляемые в SQL-запросе. Или как то пересмотреть логику работы. То, что ты описал - ИМХО не лучший повод для использования калк-полей.
VAleksey (2003-06-10 08:52:00) [4]Никак.