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

Вниз

Как реализовать поле с суммой значений из другой таблицы?   Найти похожие ветки 

 
Morrison ©   (2004-09-17 17:47) [0]

Т. е.
Таблица Visits: visitId, date, clientId + serviceSum;
Таблица Services: serviceId, name, price, visitId;

Таблицы связаны по полю VisitId. Поле serviceSum должно содержать сумму значений поля price. Причем подсчет должен осуществляться только для текущей записи таблицы Visits. Поэтому вычилсяемые поля в этом случае не подходят. Я пытался написать собственную процедуру вычиления суммы и запускать ее, когда надо, но Делфи имеет привычку обнулять вычисляемые поля каждый раз, когда должно выполняться событие OnCalcFields. Может есть способ сделать так, чтобы не обнулял? Т. е. просто чтобы было поле, куда я могу записывать все что угодно?


 
menart ©   (2004-09-17 17:59) [1]

напиши устроиство таблиц по подробнее, а то:


> Таблица Visits: visitId, date, clientId + serviceSum;
> Таблица Services: serviceId, name, price, visitId;

не совсем понятно


 
Роман Снегирев   (2004-09-17 18:00) [2]

а при чем тут вычисляемые поля. Просто напиши процедуру типа "пересчет", в которой беги в цикле по таблице визитс, для каждой записи вычисляй сумму поля price из таблицы Services и присваивай ее значение полю serviceSum текущей записи таблицы Visits (фу, вроде ничего не перепутал)


 
Morrison ©   (2004-09-17 18:03) [3]

Поле ServiceSum -- это такое поле, которого у меня нет, но которое мне хочется чтобы было :) Поэтому оно приплюсовано. В этом поле должна быть суммы значений price из таблицы Sevices.

Таблица Visits: visitId, date, clientId + serviceSum;


 
Morrison ©   (2004-09-17 18:09) [4]

Роман Снегирев,
Именно это я и хотел сделать. Но тогда какое поле добавлять в таблицу? Data требует, чтобы поле реально существовало, Calculated -- я уже говорил, Lookup тоже не подходит...


 
Morrison ©   (2004-09-18 00:20) [5]

И всё же...


 
kaif ©   (2004-09-18 00:55) [6]

Т. е. просто чтобы было поле, куда я могу записывать все что угодно?
Может быть сделать режим CachedUpdates = True и записывть туда все, что угодно?
Хотя я бы все же сделал через SQL-запрос или в крайнем случае через OnCalcFields. Почему бы не вычислять много раз? Если не хочется вычислять много раз - можно массив соорудить и там хранить результаты вычислений, а в OnCalcFields только присваивать значение, извлекая из массива (если оно там есть).


 
сергей1   (2004-09-18 08:31) [7]

не знаю насчет paradoxa, но для MSSQL это делается элементарно.
сначала считаем сумму

form1.ADOQuery2.SQL.Text:="select sum(ServiceSum) as res from Services";
form1.ADOQuery2.Open;
v:=form1.ADOQuery2.FieldByName("res").AsString;

теперь другой query (а можно даже то-же самый использовать) посылает запрос и результат светиться в гриде.

form1.ADOQuery1.SQL.Text:="select visitId, date, clientId +  + "+ v + "from Visits";
form1.ADOQuery1.Open;

все, или я что-то неправильно понял ?


 
сергей1   (2004-09-18 08:33) [8]

ой, ошибочка,

>form1.ADOQuery1.SQL.Text:="select visitId, date, clientId +  + "+ v + "from Visits";

читать как

form1.ADOQuery1.SQL.Text:="select visitId, date, clientId + "+ v + "from Visits";


 
ЮЮ ©   (2004-09-20 03:27) [9]

1) Запрос
SELECT SUM(Price) Price FROM Services WHERE visitId = :visitId
оформляешь как Detail Query

2) Если суииа нужна в гриде вместе с полями из Visits, то используем вложенный подзапрос: price.sql (текстовый файл в папке с таблицами):
SELECT visitId, SUM(Price) Price FROM Services GROUP BY visitId

Тогда запрос из Visits имее вид:
SELECT Visits.*, Price
FROM
 Visits
 LEFT JOIN price.sql price ON Visits.visitId = price.visitId



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

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

Наверх




Память: 0.46 MB
Время: 0.037 c
14-1096465788
olookin
2004-09-29 17:49
2004.10.17
И еще интересно - какова вероятность правильного определения...


1-1096529915
Pontic
2004-09-30 11:38
2004.10.17
MDI-форма в dll


3-1094999217
ANB
2004-09-12 18:26
2004.10.17
Проблема с ADO и FoxPro


3-1095447651
eLimar
2004-09-17 23:00
2004.10.17
Производительность и способы коннекта


1-1096362766
Drobu
2004-09-28 13:12
2004.10.17
Как отключить Debugger?





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