Вниз
Скачать: CL | DM;

Автокалькуляция в связанных таблицах   Найти похожие ветки 

 
Lord Vader ©   (2003-06-10 07:02) [0]

Имеется две связанные таблицы по типу "владелец-детали". Необходимо в первой таблице(владелец) в вычисляемое поле внести сумму всех значений из подчиненной таблицы(детали). Вот кусок моей программы:

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 все ж обновлял связь с таблицей детали и правильно считал итог?


 
VAleksey ©   (2003-06-10 08:52) [1]

Никак.


 
VAleksey ©   (2003-06-10 08:55) [2]

OnCalcFields для этого не предназначен
Используй вычисление отдельной процедурой по кнопке или пересчитывай суммы после поста дочерней таблицы или используй квери, если таблички не очень большие.


 
Sergey13 ©   (2003-06-10 08:55) [3]

Если честно, то я не понимаю как это вообще работает. И вообще многое не ясно. Ты вычисляешь сумму по ВСЕЙ детальной таблице, или по фильтрованому набору? Что из себя представляют сами НД - таблицы или запросы, и как осуществляется отбор данных в детале? Данные мастер-таблицы в гриде или видна только одна запись?
>Но в итоге при добавлении, удалении строки в таблицу владельца
Каким макаром ты удаляешь/добавляешь в мастер таблицу?
>или изменения данных
Изменение каких данных в мастере может повлечь за собой изменение суммы по деталу?

Что можно посоветовать. Попоробуй отказаться от калк-полей и замени их на вычисляемые в SQL-запросе. Или как то пересмотреть логику работы. То, что ты описал - ИМХО не лучший повод для использования калк-полей.


 
makdi   (2003-06-10 09:39) [4]

Согласен с Sergey13
Что тебе мешает написать запрос?
Select t.field, sum(t2.field)
from table1 t, table2 t2
where t.field1=t2.field2 //связываем таблицы между собой
group by t.field
И будет тебе счастье :)
Если не понял, то пиши.



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.015 c
14-7688
RDA
2003-06-14 18:49
2003.07.03
Идентичность отпечатков пальцев


14-7627
Колян
2003-06-15 20:04
2003.07.03
Ктонить знает как отследить запуск других программ?


1-7485
Max_
2003-06-16 15:29
2003.07.03
Индекс пункта меню!


1-7481
mao
2003-06-20 08:11
2003.07.03
Alt+F4


1-7421
manumba
2003-06-23 11:23
2003.07.03
Профессиональное использование ООП в Delphi.....литература




   Наверх