Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2007, 17:10   #1
John_chek
Форумчанин
 
Аватар для John_chek
 
Регистрация: 24.01.2007
Сообщений: 108
По умолчанию Запросы для создания отчета

Имеется 10 руководителей. Необходимо посчитать по каждому руководителю колличество согласованных им документов, чтобы в дальнейшем можно было вывести в отчет. С помощью запроса, что-то типа:
Код:
 
select * from kart where kart.id_sotrud = 1; //-results записать в табл
select * from kart where kart.id_sotrud = 2;// -results записать в табл
.
.
select * from kart where kart.id_sotrud = 10;
Нужно с помощью цикла и параметра, скорее, чтобы результат после каждого запроса записывался в таблицу.
Как это правильно написать? Вообщем нужна помощь!
John_chek вне форума Ответить с цитированием
Старый 14.02.2007, 19:13   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

select * from...
нужно заменить на
select count(*) from...

for i:=1 to 10 do
begin
Query1.SQL.Text:=''select count(*) from kart where kart.id_sotrud='+IntToStr(i);
Query1.ExecSQL;
num[i]:=Query1.FieldByName('COUNT(*)').Va lue;
end;

На выходе - массив искомых значений...

Последний раз редактировалось mihali4; 14.02.2007 в 20:33.
mihali4 вне форума Ответить с цитированием
Старый 15.02.2007, 09:14   #3
John_chek
Форумчанин
 
Аватар для John_chek
 
Регистрация: 24.01.2007
Сообщений: 108
По умолчанию

Как присвоить значение переменной?
Код:
 
var
    i :integer;
begin
    for i:=1 to 10 do
      begin
        DM.BDSAP.SQLs.SelectSQL.Text:='select count(*) from kart where kart.id_sotrud='+IntToStr(i);
        DM.BDSAP.GenerateSQLs;
        Num[i] := DM.BDSAP.FieldByName('COUNT(*)').Value;
      end;
end;
Выдает ошибку: [Error] Ustart.pas(322): Undeclared identifier: 'Num'
Код:
 
        i := DM.BDSAP.FieldByName('COUNT(*)').Value;
А так ошибка:[Error] Ustart.pas(322): Assignment to FOR-Loop variable 'i'
John_chek вне форума Ответить с цитированием
Старый 15.02.2007, 10:13   #4
John_chek
Форумчанин
 
Аватар для John_chek
 
Регистрация: 24.01.2007
Сообщений: 108
По умолчанию

Что-то я вообще не то сделал???
John_chek вне форума Ответить с цитированием
Старый 15.02.2007, 11:50   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Что-то я вообще не то сделал???
Так точно!
Цитата:
Выдает ошибку: [Error] Ustart.pas(322): Undeclared identifier: 'Num'
Кто будет массив Num[i] объявлять?
Цитата:
А так ошибка:[Error] Ustart.pas(322): Assignment to FOR-Loop variable 'i'
Даже самому Борланду непозволительно пытаться изменить параметр цикла - "i"...
mihali4 вне форума Ответить с цитированием
Старый 15.02.2007, 12:03   #6
John_chek
Форумчанин
 
Аватар для John_chek
 
Регистрация: 24.01.2007
Сообщений: 108
По умолчанию

Точно! Mihali4 вы правы!!!
Что-то типа:
Код:
 
var
    i: integer;
    num : array [1..10] of Integer;
begin
    for i:=1 to 10 do
      begin
 DM.BDSAP.Close;
        DM.BDSAP.SQLs.SelectSQL.Text:='select COUNT(*) from kart where kart.id_sotrud='+IntToStr(i);
        DM.BDSAP.Open;
        num[i] := DM.BDSAP.FieldByName('COUNT').Value;
        DM.BDSAPout.Insert;
        DM.BDSAPout.FieldByName('num').Value := DM.BDSAP.FieldValues['count'];
        DM.BDSAPout.Post;
      end;
Вроде работает!!!
John_chek вне форума Ответить с цитированием
Старый 15.02.2007, 12:04   #7
John_chek
Форумчанин
 
Аватар для John_chek
 
Регистрация: 24.01.2007
Сообщений: 108
По умолчанию

Помоему можно и бе этого?:
Код:
 
 num[i] := DM.BDSAP.FieldByName('COUNT').Value;
John_chek вне форума Ответить с цитированием
Старый 15.02.2007, 12:12   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от John_chek Посмотреть сообщение
Помоему можно и бе этого?:
Код:
 
 num[i] := DM.BDSAP.FieldByName('COUNT').Value;
Можно. Только в первом сообщении было указано
Цитата:
посчитать по каждому руководителю колличество согласованных им документов, чтобы в дальнейшем можно было вывести в отчет.
а про запись в базу - ни слова...
mihali4 вне форума Ответить с цитированием
Старый 15.02.2007, 12:14   #9
John_chek
Форумчанин
 
Аватар для John_chek
 
Регистрация: 24.01.2007
Сообщений: 108
По умолчанию

Все правильно, но а как же тогда мне потом этот массив увидеть, если я его в базу не запишу??
John_chek вне форума Ответить с цитированием
Старый 15.02.2007, 12:37   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А хотя бы вот так:
for i=1 to 10 do
ShowMessage(Количество согласованных документов руководителя N'+IntToStr(i)+' равно '+IntToStr(N[i]));
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание отчета в delphi Pang БД в Delphi 7 10.01.2012 16:35
У кого практика? Пример отчета [Smarik] Свободное общение 10 21.06.2009 19:59
QReport 3.0 формирование отчета без БД. OLEG'arh БД в Delphi 0 21.06.2008 03:21
RepoRTF: формирование отчета БД Lady_olga БД в Delphi 0 04.06.2008 13:13