| 
			| 
					
						| Harry 
								Команда клуба
								
								   Offline | 
								|  | « Ответ #30 : 05-04-2005 08:26 »  |  | 
 
 ОРГАНИЗАЦИЯ БД: две таблицы - People и Vznosi. Связь по полю PeopleCode как один ко многим (один человек-много выплат)ИНТЕРФЕЙС: основная форма - представлена в виде таблицы пиплов, переходим на любого, клацаем кнопку Форма, заходим в форму конкретного пипла. В этой форме таблица выплат этого конкретного пипла и общая сумма по пиплу. Запрос в виде, который дал HandKot приводит к ошибке, говорит, что нет поля Sum(Summa). Неясно, глюк это парадокса или просто нужно писать по другому. По идее, высчитываемое поле должно отображаться в списке полей....
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Слабый пол силен в силу слабости сильного пола к слабому |  |  | 
	| 
			| 
					
						| Harry 
								Команда клуба
								
								   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 
								Молодой специалист    Offline | 
								|  | « Ответ #32 : 05-04-2005 09:55 »  |  | 
 
 Harry, вылож на форум структуры таблиц, всеж легче будет |  
						| 
								|  |  
								|  |  Записан | 
 
 I Have Nine Lives You Have One OnlyTHINK!
 |  |  | 
	| 
			| 
					
						| HandKot 
								Молодой специалист    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 OnlyTHINK!
 |  |  | 
	| 
			| 
					
						| Harry 
								Команда клуба
								
								   Offline | 
								|  | « Ответ #34 : 06-04-2005 08:17 »  |  | 
 
 Структура - см. выше. Главная таблица - пиплы, подчиненная - выплаты, связанная с главной по коду пипла.Что касается идеи - попробую сваять что-либо подобное, если по другому не получится. Просто странно, что такую простую проблему не получается решить обычным запросом. Ну не может же в Делфях INNER JOIN не работать..... что-то я пишу неправильно. Я тут уже ссылку дал, на форуме по Delphi, может чего подскажут....
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Слабый пол силен в силу слабости сильного пола к слабому |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #35 : 06-04-2005 09:30 »  |  | 
 
  Ну не может же в Делфях INNER JOIN не работать..... что-то я пишу неправильно.
 а причем здесь inner join и дельфи, не путай праведное с грешным и где в твоей задаче нужен  inner join? |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| Harry 
								Команда клуба
								
								   Offline | 
								|  | « Ответ #36 : 06-04-2005 10:23 »  |  | 
 
 а причем здесь inner join и дельфи, не путай праведное с грешными где в твоей задаче нужен inner join?
 
 Да ладно, не придирайся    Понятно, что имеется в виду организация данных в Парадокс. А INNER JOIN я использовал бы для подзапросов. Увы, как я только что вычитал в мануале, в Local SQL (Парадокс в частности) вложенные подзапросы не поддерживает.... |  
						| 
								|  |  
								|  |  Записан | 
 
 Слабый пол силен в силу слабости сильного пола к слабому |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #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 
								Молодой специалист    Offline | 
								|  | « Ответ #38 : 06-04-2005 11:55 »  |  | 
 
 Sla  согласен, но в данном запросе не будет доп.информации по пиплам, а она может нужна, либо надо в GROUP BY добавлять и остальные поля, которые нужно выбрать
 |  
						| 
								|  |  
								| « Последнее редактирование: 06-04-2005 11:58 от HandKot » |  Записан | 
 
 I Have Nine Lives You Have One OnlyTHINK!
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #39 : 06-04-2005 12:03 »  |  | 
 
 да конечно, но код приведен как пример |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| HandKot 
								Молодой специалист    Offline | 
								|  | « Ответ #40 : 06-04-2005 12:03 »  |  | 
 
 Harry в таком случае остается сразу выбрать все данные (пиплы, выплаты) в рекордсеты, настроить таблицы с источниками на эти рекордсеты и, к примеру,на событие "Изменение строки" таблицы "пиплов" устанавливать фильтр на рекордсете "выплат" (осталось узнать, если такое св-во в рекордсете в дельфи)
 
 (у меня был такой проект для синхронного отображения данных в двух таблицах)
 |  
						| 
								|  |  
								|  |  Записан | 
 
 I Have Nine Lives You Have One OnlyTHINK!
 |  |  | 
	| 
			| 
					
						| Harry 
								Команда клуба
								
								   Offline | 
								|  | « Ответ #41 : 08-04-2005 07:05 »  |  | 
 
 Harry в таком случае остается сразу выбрать все данные (пиплы, выплаты) в рекордсеты, настроить таблицы с источниками на эти рекордсеты и, к примеру,на событие "Изменение строки" таблицы "пиплов" устанавливать фильтр на рекордсете "выплат" (осталось узнать, если такое св-во в рекордсете в дельфи)
 
 (у меня был такой проект для синхронного отображения данных в двух таблицах)
 
 Так и придется делать. Я соорудил следующий запрос: SELECT People."PeopleCode", (Sum(Vznosi."Summa")) AS TotalFROM "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 
								Молодой специалист    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 OnlyTHINK!
 |  |  | 
	|  |