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

Вниз

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

 
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 вся ветка

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

Наверх





Память: 0.45 MB
Время: 0.009 c
1-7427
eLVik
2003-06-23 11:50
2003.07.03
Поиск файлов


1-7450
Darrin
2003-06-23 14:39
2003.07.03
Создание компонент


7-7748
Владимир3
2003-04-22 12:49
2003.07.03
как получить значение уровня громкости WAVE-устройств Windows?


1-7526
INCOGNITO
2003-06-21 03:26
2003.07.03
KeyDown Event


6-7567
andrew_snk
2003-04-25 23:36
2003.07.03
Определение заголовка сайта





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