|
#1
|
|||
|
|||
Запрос
Помогите дописать запрос вот код, который выводит количество всез часов из запроса.
Код:
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
|
||||
|
||||
Я так понял Вы хотите написать именно запрос который будет считать кол-во часов без перебора всех данных??
Если это так, то Вам необходим такой код: Код:
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
|
|||
|
|||
скорей всего вы меня не поняли, мне нужно по мимо всей суммы часов, сумму часов по разным типам из столбца "тип"
ниже скиншот, примера того, что я хотел(в черном квадрате).Но что бы сам запрос в DBGrid остался и не изменялся |
#4
|
||||
|
||||
Теперь все понятно.
Для подсчета статистики Вам лучше добавить отдельно 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
|
|||
|
|||
есть не большая поблемка, он почему то если нет часов то он пишет свои какие то...
|
#6
|
||||
|
||||
Цитата:
Код:
var sem, tes, exz: integer; begin sem:=0; tes:=0; exz:=0; From VasYa with LoVe... |
#7
|
|||
|
|||
и все равно у меня почему то пишет одинаковые часы!если нет определенного типа
Последний раз редактировалось жекаизжека, 09.01.2009 в 01:07. |
#8
|
|||
|
|||
Проверяй результат вызова Locate:
Код:
If ADOQuery1.Locate(...) Then label1.Caption := ADOQuery1.FieldByName(...).AsString Else label1.Caption := '0'; |
#9
|
|||
|
|||
все работает....только произошла маленькая загвоздка!!можно ли все выбирать из DBGridа не из запросов
|