Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Сумма по полю для текущей записи  (Прочитано 40427 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Harry
Команда клуба

ua
Offline Offline

« Ответ #30 : 05-04-2005 08:26 » 

ОРГАНИЗАЦИЯ БД: две таблицы - People и Vznosi. Связь по полю PeopleCode как один ко многим (один человек-много выплат)
ИНТЕРФЕЙС: основная форма - представлена в виде таблицы пиплов, переходим на любого, клацаем кнопку Форма, заходим в форму конкретного пипла. В этой форме таблица выплат этого конкретного пипла и общая сумма по пиплу. Запрос в виде, который дал HandKot приводит к ошибке, говорит, что нет поля Sum(Summa). Неясно, глюк это парадокса или просто нужно писать по другому. По идее, высчитываемое поле должно отображаться в списке полей....
Записан

Слабый пол силен в силу слабости сильного пола к слабому
Harry
Команда клуба

ua
Offline Offline

« Ответ #31 : 05-04-2005 08:46 » 

SELECT People.*,
(SELECT Sum(Vznosi."Summa")
FROM "Vznosi.DB" Vznosi
WHERE Vznosi."PeopleCode"=People."PeopleCode")
FROM "People.DB" People

Вот этот запрос. Он выдает ошибку, говорит не найдено поле Sum(Summa). Действительно, в выпадающем списке доступных полей его нет. Т.е. второй Select не выполняется.
Записан

Слабый пол силен в силу слабости сильного пола к слабому
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #32 : 05-04-2005 09:55 » 

Harry, вылож на форум структуры таблиц, всеж легче будет
Записан

I Have Nine Lives You Have One Only
THINK!
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #33 : 06-04-2005 05:54 » 

тут появилась еще одна идея - использовать св-во Filter объекта Recordset, либо объекта таблица

(делфи не знаю, пишу на басике)

На главной форме :
dim rsPeople as ADODB.Recordset

rsPeople.Open "SELECT * FROM People", connection
set dbgrdPeople.DataSource = rsPeople    ' присваиваем таблице источник строк
BoundColumn = rs!PeopleCode

На форме взносов:
dim rsVznosy as ADODB.Recordset
dim rsTotalVznosy as ADODB.Recordset

rsVznosy.Open "SELECT * FROM Vznosy", connection
rsTotalVznosy.Open "SELECT PeopleCode, SUM(Summa) AS [TotalSum] FROM Vznosy GROUP BY PeopleCode"
set dbgrdVznosy = rsVznosy
set txtTotal.Text = rsTotalVznosy!TotalSum

при открытий формы взносов устанавливаем фильтр
sub frmVznosyLoad()
  rsVznosy.Filter = "PeopleCode = " & frmPeople.dbgrdPeople.BoundColumn
  rsTotalVznosy.Filter = "PeopleCode = " & frmPeople.dbgrdPeople.BoundColumn
 
end sub

в Дельфи может отличатся, но идею вроде нормально объяснил
« Последнее редактирование: 20-12-2007 19:04 от Алексей1153++ » Записан

I Have Nine Lives You Have One Only
THINK!
Harry
Команда клуба

ua
Offline Offline

« Ответ #34 : 06-04-2005 08:17 » 

Структура - см. выше. Главная таблица - пиплы, подчиненная - выплаты, связанная с главной по коду пипла.
Что касается идеи - попробую сваять что-либо подобное, если по другому не получится. Просто странно, что такую простую проблему не получается решить обычным запросом. Ну не может же в Делфях INNER JOIN не работать..... что-то я пишу неправильно. Я тут уже ссылку дал, на форуме по Delphi, может чего подскажут....
Записан

Слабый пол силен в силу слабости сильного пола к слабому
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #35 : 06-04-2005 09:30 » 

Ну не может же в Делфях INNER JOIN не работать..... что-то я пишу неправильно.
а причем здесь inner join и дельфи, не путай праведное с грешным
и где в твоей задаче нужен  inner join?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Harry
Команда клуба

ua
Offline Offline

« Ответ #36 : 06-04-2005 10:23 » 

а причем здесь inner join и дельфи, не путай праведное с грешным
и где в твоей задаче нужен inner join?
Да ладно, не придирайся Улыбаюсь Понятно, что имеется в виду организация данных в Парадокс.
А INNER JOIN я использовал бы для подзапросов. Увы, как я только что вычитал в мануале, в Local SQL (Парадокс в частности) вложенные подзапросы не поддерживает....
Записан

Слабый пол силен в силу слабости сильного пола к слабому
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #37 : 06-04-2005 10:36 » 

а разве так нельзя?
Код:
SELECT People.PeopleCode, Sum(Vznosi."Summa")
FROM "Vznosi.DB" Vznos, "People.DB" People
WHERE Vznosi."PeopleCode"=People."PeopleCode"
Group by People.PeopleCode
в принципе это и есть inner join
« Последнее редактирование: 06-04-2005 10:38 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #38 : 06-04-2005 11:55 » 

Sla  согласен, но в данном запросе не будет доп.информации по пиплам, а она может нужна, либо надо в GROUP BY добавлять и остальные поля, которые нужно выбрать
« Последнее редактирование: 06-04-2005 11:58 от HandKot » Записан

I Have Nine Lives You Have One Only
THINK!
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #39 : 06-04-2005 12:03 » 

да конечно, но код приведен как пример
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #40 : 06-04-2005 12:03 » 

Harry в таком случае остается сразу выбрать все данные (пиплы, выплаты) в рекордсеты, настроить таблицы с источниками на эти рекордсеты и, к примеру,
на событие "Изменение строки" таблицы "пиплов" устанавливать фильтр на рекордсете "выплат" (осталось узнать, если такое св-во в рекордсете в дельфи)

(у меня был такой проект для синхронного отображения данных в двух таблицах)
Записан

I Have Nine Lives You Have One Only
THINK!
Harry
Команда клуба

ua
Offline Offline

« Ответ #41 : 08-04-2005 07:05 » 

Harry в таком случае остается сразу выбрать все данные (пиплы, выплаты) в рекордсеты, настроить таблицы с источниками на эти рекордсеты и, к примеру,
на событие "Изменение строки" таблицы "пиплов" устанавливать фильтр на рекордсете "выплат" (осталось узнать, если такое св-во в рекордсете в дельфи)

(у меня был такой проект для синхронного отображения данных в двух таблицах)

Так и придется делать. Я соорудил следующий запрос:
Код:
SELECT People."PeopleCode", (Sum(Vznosi."Summa")) AS Total
FROM "People.DB" People, "Vznosi.DB" Vznosi
WHERE Vznosi."PeopleCode"=People."PeopleCode"
GROUP BY People."PeopleCode"
ORDER BY Total
Но он выбирает сумму по текущей записи, теперь придется учесть перемещение курсора по записям, чтобы динамически менялись суммы.
« Последнее редактирование: 08-04-2005 07:08 от Harry » Записан

Слабый пол силен в силу слабости сильного пола к слабому
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #42 : 08-04-2005 11:04 » 

Harry, я имелл ввиду следующее:
главная форма
rsP = "select * from people"

это источник строк грида

подчиненная форма (или грид)
rsV = "select peoplecode, sum(Summa) from Vznozy group by peoplecode"
rsV.Filter = "PeopleCode = " & rsP!PeopleCode
источник строк для грида

на событие смены строки в гриде
sub грид_People_RowChange()
rsV.Filter = "PeopleCode = " & rsP!PeopleCode
end sub

примерно так


PS: хотя не мне учить, разработчик сам решает как лучше сделать
« Последнее редактирование: 08-04-2005 11:18 от HandKot » Записан

I Have Nine Lives You Have One Only
THINK!
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines