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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2014, 14:21   #1
АНЯ_17
Пользователь
 
Регистрация: 16.08.2014
Сообщений: 17
По умолчанию Запрос в НД

Код:
var
 Ap,xl,sv,sm,pod1,pod2: Variant;// peremeni sv = пол жен sm = пол муж
 i: integer;
 f,j : TdateTime;
begin
      Edit1.text:='0';
      Edit2.text:='0';
      Edit3.text:='0';
      Edit4.text:='0';
      Edit5.text:='0';
        sm:='0'; sv:='0';  pod1:='0'; pod2:='0';
begin
 Ap := CreateOleObject('Excel.Application');
  Ap.Workbooks.Open('C:\exl\44.xls');
  Ap.Workbooks.Open('C:\exl\44.xls',0,false);
  Ap.Visible := true;
  Ap.DisplayAlerts := False;
end;
 begin
    Fstatic.DBGrid1.DataSource:=db.dataq;
    try
     db.Adq.SQL.Clear;
        db.AdQ.SQL.Add('SELECT * FROM roj WHERE  d_reg between :f and :j' );// оно выбирает даты 
          f := Trunc(DateTimePicker1.Date);   // начало дата 
          j := Trunc(DateTimePicker2.Date);  // конец дата 
       db.AdQ.Params.ParamByName('f').Value:= f;
       db.AdQ.Params.ParamByName('j').Value:= j;
       db.AdQ.Active:=True;
      except
      on e:Exception do
     end;
 db.AdQ.First;
 for I := 1 to db.AdQ.RecordCount do
  begin
    if db.AdQ.FieldByName('sex').Value='Муж'  then
    edit1.text:=inttostr(strtoint(Edit1.text)+1);
            sm:=sm+1;
       Ap.Range['C2'] := sm;
       begin
           if db.AdQ.FieldByName('sex').Value='Жен'  then
          edit2.text:=inttostr(strtoint(Edit2.text)+1);
                sv:=sv+1;
        Ap.Range['B2'] := sv;
              begin
                if db.AdQ.FieldByName('podra').Value='Первомайский район'   then
                  edit3.text:=inttostr(strtoint(Edit3.text)+1);
                   begin
                  if db.AdQ.FieldByName('podra').Value='Октябрьский район'  then
               edit4.text:=inttostr(strtoint(Edit4.text)+1);
              end;
             end;
          db.AdQ.next;
          end;
     end;
   end;
Как разделить поли по подразделение ??
что та я неправильна написала
за ран спс.
Изображения
Тип файла: jpg 2014-08-27_144826.jpg (111.3 Кб, 119 просмотров)

Последний раз редактировалось Stilet; 27.08.2014 в 21:53.
АНЯ_17 вне форума Ответить с цитированием
Старый 27.08.2014, 15:47   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Аня, похоже, что Вы забываете про BEGIN END

например, если вы проверяете условие:
Цитата:
Код:
if db.AdQ.FieldByName('sex').Value='Муж'  then
    edit1.text:=inttostr(strtoint(Edit1.text)+1);
            sm:=sm+1;
       Ap.Range['C2'] := sm;
то выполняется так:
Код:
    if db.AdQ.FieldByName('sex').Value='Муж'  then
           edit1.text:=inttostr(strtoint(Edit1.text)+1); {это выполняется если пол = Муж}

    sm:=sm+1;   <---------------- этот оператор выполняется ВНЕ зависимости от пола
    Ap.Range['C2'] := sm;    <---------------- этот оператор выполняется ВНЕ зависимости от пола
и т.д.

должно быть так:
Код:
    if db.AdQ.FieldByName('sex').Value='Муж'  then 
      begin
           
         edit1.text:=inttostr(strtoint(Edit1.text)+1);
         sm:=sm+1; 
         Ap.Range['C2'] := sm; {эти все операторы выполняются если пол = Муж}

         тут ещё что-то, если мальчика ещё как-то надо обработать....
      
      end <--- конец блока обработки мальчика

p.s. Но это всё вторично!
Главное:
Подобные таблицы не стоит заполнять вручную
ОДИН простой SQL запрос сразу получит нужный Вам результат!


p.s. Вы в русском языке делаете ошибки. Например, мальчики (через мягкий знак), мужчина, женщина...

Последний раз редактировалось Serge_Bliznykov; 27.08.2014 в 16:02.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.08.2014, 16:01   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

по поводу запроса, котрый одним махом решает вашу задачу:

просто для примера.
Киньте на форму ещё один TAdsQuery
Переименуйте его (просто для примера в AdsQueryStatistic

напришите примерно такой текст:

Код:
AdsQueryStatistic.SQL.Clear;
AdsQueryStatistic.Add('SELECT podra, count(*) as VsegoPodr '+
             ' FROM roj WHERE  d_reg between :f and :j ' +
             ' GROUP BY podra ' );
          f := Trunc(DateTimePicker1.Date);   // начало дата 
          j := Trunc(DateTimePicker2.Date);  // конец дата 
       AdsQueryStatistic.Params.ParamByName('f').Value:= f;
       AdsQueryStatistic.Params.ParamByName('j').Value:= j;
       AdsQueryStatistic.Active:=True;

теперь у Вас все районы и количество людей в каждом районе в AdsQueryStatistic
перебирайте, выводите в Excel, делайте всё, что надо.

Точно так же можно и по муж/жен статистику собрать.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.08.2014, 16:44   #4
АНЯ_17
Пользователь
 
Регистрация: 16.08.2014
Сообщений: 17
По умолчанию ммм

Код HTML:
В общем Я хотела выгрузит по след. виде 

Подразделение 	        	 Девушки                   Мальчики

Первомайский район                1  	                     3
Октябрьский район	          1	                     1


за ран. спс.
АНЯ_17 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на выборку и отчет на этот запрос Camelot_2012 Microsoft Office Access 2 21.12.2011 16:48
Запрос DrozdNik Microsoft Office Excel 2 15.02.2011 08:55
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50