![]() |
|
|
#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 |
|
#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; |
|
#5
|
|||
|
|||
|
есть не большая поблемка, он почему то если нет часов то он пишет свои какие то...
|
|
#6
|
||||
|
||||
|
Цитата:
Код:
var sem, tes, exz: integer; begin sem:=0; tes:=0; exz:=0; |
|
#7
|
|||
|
|||
|
и все равно у меня почему то пишет одинаковые часы!если нет определенного типа
Последний раз редактировалось жекаизжека, 09.01.2009 в 01:07. |
|
#8
|
|||
|
|||
|
Проверяй результат вызова Locate:
Код:
If ADOQuery1.Locate(...) Then label1.Caption := ADOQuery1.FieldByName(...).AsString Else label1.Caption := '0'; |
|
#9
|
|||
|
|||
|
все работает....только произошла маленькая загвоздка!!можно ли все выбирать из DBGridа не из запросов
|