Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.06.2008, 21:56
Жулик Жулик вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 21
Репутация: 5
Сообщение Суммирование полей с последующим выводом результата

Уважаемые программисты!
Нужна ваша помощь!

У меня возникла проблема, вот какого плана.

Мне необходимо организовать подчет суммы поле с условиями.
Имеется БД в ней таблицы stud и propuski, руководитель потребовал сделать своего рода отчет по пропускам группы, он выглядит следующим образом: в гриде должна отображается табличка такого вида:
|фамилия|кол-во пропусков по уважительной причине|кол-во пропусков по не уважительной причине|

Необходимо вывести сумму пропущенных часов за заданный период по каждому студенту из выбранной группы.

Как это реализовать программно? Использую ADO-Access.
Кто с таким сталкивался или хотябы примерно знает как это сделать, прошу помощи!!
Ответить с цитированием
  #2  
Старый 12.06.2008, 16:24
Жулик Жулик вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 21
Репутация: 5
Восклицание Поправка.

Перефразирую проблему, необходимо посчитать сумму пропущенных часов группы в частности по каждому студенту в отдельности, уважительных и не уважительных за выбранный период и вывести в грид с последующим экспортом в Excel(ну с этим у меня проблем нет) в гриде фамилии студентов выбранной группы, а напротив в ячейках сумма пропусков по двум критериям (ув.) и (неув.), я так думаю надо организовать цикл, а как его представать в работоспособном коде я не могу, у меня не получается…при попытке написания выводятся все записи с фамилиями студентов за заданный период и происходит подсчет по всем фамилиям а не по одной как необходимо...

Кто может помочь?? Очень надо скоро сдача а руководитель принципиален и не идёт на уступки
Ответить с цитированием
  #3  
Старый 13.06.2008, 13:13
voron_paa voron_paa вне форума
Прохожий
 
Регистрация: 26.01.2008
Сообщения: 49
Репутация: 10
По умолчанию

Цитата:
Сообщение от Жулик
Перефразирую проблему, необходимо посчитать сумму пропущенных часов группы в частности по каждому студенту в отдельности, уважительных и не уважительных за выбранный период и вывести в грид с последующим экспортом в Excel(ну с этим у меня проблем нет) в гриде фамилии студентов выбранной группы, а напротив в ячейках сумма пропусков по двум критериям (ув.) и (неув.), я так думаю надо организовать цикл, а как его представать в работоспособном коде я не могу, у меня не получается…при попытке написания выводятся все записи с фамилиями студентов за заданный период и происходит подсчет по всем фамилиям а не по одной как необходимо...

Кто может помочь?? Очень надо скоро сдача а руководитель принципиален и не идёт на уступки

Запрос с группировкой:

Код:
select s.fio, sum(p.uv) as uvaj, sum(p.nuv) as neuvaj  from stud s, propuski p
where s.kod = p.kod
group by s.fio

И выводиш его в грид
Используешь ADOQuery
Лучшще кидани исходник проги... Я тебе там вставлю
Или сам понял?

И вообще учи SQL в жизни пригождится
Ответить с цитированием
  #4  
Старый 13.06.2008, 13:52
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Могу предложить один вариант.
С помощью запроса получить таблицу (фамилия, вид пропуска, кол-во пропусков). А потом уже этот запрос обрабатывать и приводить к тому виду что тебе надо через цикл.
Код:
 With adoQuery1 do begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT familia,vid_propuska,COUNT(vid_propuska) from propuski, stud');
      SQL.Add('WHERE stud.code_s=propuski.code_s');
      SQL.Add('group by familia,vid_propuska');
      Open;
   end;
Ответить с цитированием
  #5  
Старый 13.06.2008, 18:44
Жулик Жулик вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 21
Репутация: 5
По умолчанию

Цитата:
Сообщение от voron_paa
Запрос с группировкой:

Код:
select s.fio, sum(p.uv) as uvaj, sum(p.nuv) as neuvaj  from stud s, propuski p
where s.kod = p.kod
group by s.fio

И выводиш его в грид
Используешь ADOQuery
Лучшще кидани исходник проги... Я тебе там вставлю
Или сам понял?

И вообще учи SQL в жизни пригождится

voron_paa
Хм... понять то понел, да не совсем
А можно пояснить для особо "одарённых??"

Цитата:
Сообщение от MegaPiha
Могу предложить один вариант.
С помощью запроса получить таблицу (фамилия, вид пропуска, кол-во пропусков). А потом уже этот запрос обрабатывать и приводить к тому виду что тебе надо через цикл.

Код:
 With adoQuery1 do begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT familia,vid_propuska,COUNT(vid_propuska) from propuski, stud');
      SQL.Add('WHERE stud.code_s=propuski.code_s');
      SQL.Add('group by familia,vid_propuska');
      Open;
   end;
MegaPiha

Да таблица получается, ток я не совсем понимаю какого вида цикл надо использывать...

Напомню вид нужной таблици в гриде:
|Фамилия|Сумма часов пропущенных по ув. причине|Сумма часов пропущенных по неув. причине|

Вот исходник, по нему наверно проще будет объяснить, показать.
Вложения
Тип файла: zip Исходник.zip (37.1 Кбайт, 4 просмотров)
Ответить с цитированием
  #6  
Старый 13.06.2008, 21:30
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Я вначале неправильно понял, там считал кол-во пропусков, а не кол-во часов.
Вложения
Тип файла: zip Исходник2.zip (43.1 Кбайт, 12 просмотров)
Ответить с цитированием
  #7  
Старый 13.06.2008, 22:19
Жулик Жулик вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 21
Репутация: 5
По умолчанию

Цитата:
Сообщение от MegaPiha
Я вначале неправильно понял, там считал кол-во пропусков, а не кол-во часов.

MegaPiha
Благодарен тебе!!

Но, мне необходимо подсчет не по всем студентам а по студентам выбранной группы и в добавок к этому и за определенный период. Пытаюсь сам поправить запрос но постоянно ругается, может я что-то не так делаю, первый раз вижу такую ошибку??
"Попытка выполнить запрос, который не включает указанное вложение 'Gruppa' как части синтаксической функции или группы "

Код:
 With adoQuery3 do begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT stud.familia,propuski.vid_propuska,sum(kol_vo_chas) as cnt,stud.Gruppa,propuski.data from propuski, stud');
      SQL.Add('WHERE stud.code_s=propuski.code_s');
      SQL.Add('AND s.Gruppa  = :g');
      SQL.Add('AND p.data BETWEEN :dn AND :dk ');
      SQL.Add('group by familia,vid_propuska');
      Parameters.ParseSQL(SQL.Text,true);
      Parameters.ParamByName('g').Value:= ComboBox2.Text;
      Parameters.ParamByName('dn').Value:= DateTimePicker1.Date;
      Parameters.ParamByName('dk').Value:= DateTimePicker2.Date;
      Open;

Мне жутко стыдно просить, но всё же, помоги, очень нужно!! Пажалуйста!
Ответить с цитированием
  #8  
Старый 13.06.2008, 23:05
Жулик Жулик вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 21
Репутация: 5
По умолчанию

Так запрос сам исравил, но теперь сумма часов выводится не првавильная...пытался найти где идет ошибка при подсчете, понел что он не считает а выводит просто последнюю запись по каждой фамилии или я ошибаюсь, но он точно считает не правилино...

вот как исправил запрос:
Код:
 With adoQuery3 do begin
       Close;
      SQL.Clear;
      SQL.Add('SELECT stud.familia,propuski.vid_propuska,sum(kol_vo_chas) as cnt,stud.Gruppa,propuski.data from propuski, stud');
      SQL.Add('WHERE stud.code_s=propuski.code_s');
      SQL.Add('AND stud.Gruppa  = :g');
      SQL.Add('AND propuski.data BETWEEN :dn AND :dk ');
      SQL.Add('group by familia,vid_propuska,propuski.data,stud.Gruppa');
      SQL.Add('ORDER BY stud.familia');
      Parameters.ParseSQL(SQL.Text,true);
      Parameters.ParamByName('g').Value:= ComboBox2.Text;
      Parameters.ParamByName('dn').Value:= DateTimePicker1.Date;
      Parameters.ParamByName('dk').Value:= DateTimePicker2.Date;
      Open;


Последний раз редактировалось Жулик, 13.06.2008 в 23:08.
Ответить с цитированием
  #9  
Старый 13.06.2008, 23:21
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Попробуй поменять порядок группировки
propuski.data,stud.Gruppa,familia,vid_propuska
Ответить с цитированием
  #10  
Старый 13.06.2008, 23:28
Жулик Жулик вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 21
Репутация: 5
По умолчанию

Цитата:
Сообщение от MegaPiha
Попробуй поменять порядок группировки
propuski.data,stud.Gruppa,familia,vid_propuska

Неа не помогло, тоже самое выводит...
Ответить с цитированием
  #11  
Старый 14.06.2008, 10:43
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Код:
    With adoQuery3 do begin
       Close;
      SQL.Clear;
      SQL.Add('SELECT familia,propuski.vid_propuska,sum(kol_vo_chas) as cnt,stud.Gruppa from propuski, stud');
      SQL.Add('WHERE stud.code_s=propuski.code_s');
      SQL.Add('AND stud.Gruppa  = :g');
      SQL.Add('AND propuski.data BETWEEN :dn AND :dk ');
      SQL.Add('group by stud.Gruppa,familia,vid_propuska');
      SQL.Add('ORDER BY familia');
      Parameters.ParseSQL(SQL.Text,true);
      Parameters.ParamByName('g').Value:= ComboBox2.Text;
      Parameters.ParamByName('dn').Value:= DateTimePicker1.Date;
      Parameters.ParamByName('dk').Value:= DateTimePicker2.Date;
      Open;
      end;
Предлагаю убрать дату из Select-а. Она не нужна. По диапазону осуществляем поиск, выбирать это поле не будем. Я проверил все считает как надо.
Ответить с цитированием
  #12  
Старый 14.06.2008, 13:20
Жулик Жулик вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 21
Репутация: 5
По умолчанию

Цитата:
Сообщение от MegaPiha
Предлагаю убрать дату из Select-а. Она не нужна. По диапазону осуществляем поиск, выбирать это поле не будем. Я проверил все считает как надо.

MegaPiha

Спасибо тебе огромное!!! Оказывается всё просто.
Убедился, что моногому нужно учиться...

Цитата:
Сообщение от voron_paa
И вообще учи SQL в жизни пригождится

А какую литературу по нему посоветуешь ты, да и все здесь присутствующие??
Ответить с цитированием
  #13  
Старый 14.06.2008, 13:31
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от Жулик
А какую литературу по нему посоветуешь ты, да и все здесь присутствующие??
Если изучать азы то ИМХО самая понятная и доступная книга Михаила Фленова "Язык запросов SQL".
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter