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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.12.2008, 18:23
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию Запрос

Помогите дописать запрос вот код, который выводит количество всез часов из запроса.
Код:
form3.ADOQuery1.SQL.Clear;
Form3.ADOQuery1.SQL.Add('select дата, группа,дис, тип, тема, часы from кар where ФИО='''+Form1.DBLookupComboBox2.Text+'''');
  try
  form3.ADOQuery1.Open;
  H := 0;
  while not Form3.ADOQuery1.eof do begin
    H := H + Form3.ADOQuery1.FieldByName('часы').AsInteger;
    form3.ADOQuery1.Next;
  end;
  form3.ADOQuery1.First;
 Form3.Label2.Caption :='Вы отработали: '+ IntToStr(H)+ ' часов';
  finally
  form3.ADOQuery1.Close;
  Form3.ADOQuery1.Active:=true;
  end

Как мне сделать чтобы он высчитывал часы обпределенного значения из столбцов "тип", но сам запрос не менялся ('select дата, группа,дис, тип, тема, часы from кар where ФИО='''+Form1.DBLookupComboBox2.Text+'''')
Ответить с цитированием
  #2  
Старый 01.01.2009, 22:36
Аватар для Appolon
Appolon Appolon вне форума
Новичок
 
Регистрация: 10.01.2008
Адрес: гЕйск
Сообщения: 76
Репутация: 16
По умолчанию

Я так понял Вы хотите написать именно запрос который будет считать кол-во часов без перебора всех данных??
Если это так, то Вам необходим такой код:
Код:
with form3.ADOQuery1.SQL do
begin 
 Clear;
 Add('select sum(часы) from кар ');
 Add(' where ФИО='''+Form1.DBLookupComboBox2.Text+'''');
 Open;
 H:=form3.ADOQuery1.Fields.Fields[0].AsString;
 Close;
end;
 Form3.Label2.Caption :='Вы отработали: '+ H+ ' часов';
end
Я не проверял, но работать должно. Если я Вас не правильно понял, то попробуйте привести пример результатов выполнения кода программы.
__________________
From VasYa with LoVe...
Ответить с цитированием
  #3  
Старый 02.01.2009, 15:46
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

скорей всего вы меня не поняли, мне нужно по мимо всей суммы часов, сумму часов по разным типам из столбца "тип"
ниже скиншот, примера того, что я хотел(в черном квадрате).Но что бы сам запрос в DBGrid остался и не изменялся
Изображения
Тип файла: jpg Безымянный.jpg (42.1 Кбайт, 18 просмотров)
Ответить с цитированием
  #4  
Старый 04.01.2009, 12:36
Аватар для Appolon
Appolon Appolon вне форума
Новичок
 
Регистрация: 10.01.2008
Адрес: гЕйск
Сообщения: 76
Репутация: 16
По умолчанию

Теперь все понятно.
Для подсчета статистики Вам лучше добавить отдельно Query. перебор данных это некрасиво, да и при большом объеме данных занимает много времени на обработку.
Код:
var sem, tes, exz: integer;
begin
  with form3.ADOQuery2.SQL do
	begin 
	 Clear;
	 Add('select тип as тип, sum(часы) as часы from кар ');
	 Add(' where ФИО='''+Form1.DBLookupComboBox2.Text+'''');
	 Add(' group by тип');
	end;
 form3.ADOQuery2.Open;
 
 form3.ADOQuery2.Locate('тип', 'семинар',[]);
 sem:=form3.ADOQuery2.Fields.Fields[1].AsInteger;
 
 form3.ADOQuery2.Locate('тип', 'тест',[]);
 tes:=form3.ADOQuery2.Fields.Fields[1].AsInteger;
 
 form3.ADOQuery2.Locate('тип', 'экзамен', []);
 exz:=form3.ADOQuery2.Fields.Fields[1].AsInteger;
 
 Form3.Label2.Caption :='Семинаров: '+ sem+ ' часов'+#13+
						'Тестов: '+ tes+ ' часов'+#13+
						'Экзаменов: '+ exz+ ' часов';
 form3.ADOQuery2.Close;
end;
Попробуйте вот так.
__________________
From VasYa with LoVe...
Ответить с цитированием
  #5  
Старый 06.01.2009, 02:27
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

есть не большая поблемка, он почему то если нет часов то он пишет свои какие то...
Ответить с цитированием
  #6  
Старый 07.01.2009, 10:48
Аватар для Appolon
Appolon Appolon вне форума
Новичок
 
Регистрация: 10.01.2008
Адрес: гЕйск
Сообщения: 76
Репутация: 16
По умолчанию

Цитата:
Сообщение от жекаизжека
есть не большая поблемка, он почему то если нет часов то он пишет свои какие то...

Код:
var sem, tes, exz: integer;
begin
 sem:=0;  tes:=0;  exz:=0;
__________________
From VasYa with LoVe...
Ответить с цитированием
  #7  
Старый 09.01.2009, 00:53
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

и все равно у меня почему то пишет одинаковые часы!если нет определенного типа

Последний раз редактировалось жекаизжека, 09.01.2009 в 01:07.
Ответить с цитированием
  #8  
Старый 09.01.2009, 02:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Проверяй результат вызова Locate:

Код:
If ADOQuery1.Locate(...) 
  Then label1.Caption := ADOQuery1.FieldByName(...).AsString
  Else label1.Caption := '0';
Ответить с цитированием
  #9  
Старый 09.01.2009, 19:29
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

все работает....только произошла маленькая загвоздка!!можно ли все выбирать из DBGridа не из запросов
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter