Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как разделить поли по подразделение БД


Автор: Аня17 28.8.2014, 14:45
Как мне сделать что бы оно по подразделение разделила пол по девушки и мальчики  ??? 
смотрите скриншот так  хотела что бы получил.... 

Код

 var
 Ap,xl,sv,sm,podr1,podr2: Variant;// peremeni sv = пол жен sm = пол муж
   i: integer;
    f,j : TdateTime;
 begin
      Fstatic.DBGrid1.DataSource:=db.dataq;
      Edit3.text:='0';  Edit4.text:='0';
      sm:='0'; sv:='0'; podr1:='0'; podr2:='0';

 begin
      Ap := CreateOleObject('Excel.Application');
      Ap.Workbooks.Open('C:\exl\44.xls');
      Ap.Workbooks.Open('C:\exl\44.xls',1,true);
      Ap.Visible := true;
      Ap.DisplayAlerts := False;
 end;
 begin
      Fstatic.DBGrid1.DataSource:=db.dataq;
      try
        db.AdsQueryStatistic.SQL.Clear;
          db.AdsQueryStatistic.SQL.Add('SELECT *  FROM roj WHERE  d_reg between :f and :j');       //sex,podra, count(*) as VsegoPodr '+
              f := Trunc(DateTimePicker1.Date);
              j := Trunc(DateTimePicker2.Date);
        db.AdsQueryStatistic.Params.ParamByName('f').Value:= f;
        db.AdsQueryStatistic.Params.ParamByName('j').Value:= j;
        db.AdsQueryStatistic.Active:=True;
      except
      on e:Exception do
 end;
     db.AdsQueryStatistic.First;
        for I := 1 to db.AdsQueryStatistic.RecordCount do
           begin
             if db.AdsQueryStatistic.FieldByName('sex').Value='Муж'  then
                 begin
                    sm:=sm+1;
                    Ap.Range['e11'] := sm; {yoe ana iia?aoi?u auiieiy?ony anee iie = Io?}
                 end;
                  begin
                     if db.AdsQueryStatistic.FieldByName('sex').Value='Жен'  then
                         begin
                            sv:=sv+1;
                            Ap.Range['f11'] := sv;
                          end;
                   begin
                      if db.AdsQueryStatistic.FieldByName('podra').Value='Первомайский район'   then
                          begin
                             edit3.text:=inttostr(strtoint(Edit3.text)+1);
                             podr1:=podr1+1;
                          end;
                    begin
                       if db.AdsQueryStatistic.FieldByName('podra').Value='Октябрьский район'  then
                           begin
                          edit4.text:=inttostr(strtoint(Edit4.text)+1);
                              podr2:=podr2+1;
                     end;
       db.AdsQueryStatistic.next;
            end;
          end;
          end;
       end;
   end;
end;


за ран спс.

Добавлено через 3 минуты и 4 секунды
Скриншотик

Автор: ТоляМБА 28.8.2014, 15:05
21 строка
'SELECT podra, sex, count(*) as C  FROM roj WHERE  d_reg between :f and :j GROUP BY podra, sex ORDER BY 1, 2'
вернет нам в отсортированном порядке подразделение, пол, количество, отсюда можно уже выбирать нужный район в цикле как у тебя, но лучше передать нужные районы в массив и сделать вложенный цикл.
Можно поиск района включить во WHERE и передать параметром - количество запросов будет равно количеству необходимых тебе районов.

Добавлено через 2 минуты и 14 секунд
необходимое количество будет в
db.AdsQueryStatistic.FieldByName('C').Value

Автор: Аня17 29.8.2014, 09:42
Честно сказать я перепутала чуть, как присваиваем значение, в массив  Value ‘С’  к например ячейке  А1, B1 ?? как вы сказкали
или на 
edit1.text:=;
и я выгружаю в ексел с edit1.text
за ран спс.

Автор: superVad 1.9.2014, 20:03
 smile 

Автор: ТоляМБА 1.9.2014, 21:10
superVad, что с тобой? 1 сентября?

Автор: Аня17 2.9.2014, 08:26
 smile   smile 

Автор: Rodman 2.9.2014, 12:03

M
Rodman
Модератор: Давайте вернёмся к теме обсуждения.

Автор: superVad 3.9.2014, 15:49
Цитата(Rodman @  2.9.2014,  11:03 Найти цитируемый пост)
Модератор: Давайте вернёмся к теме обсуждения.

Я или русский за отпуск забыл или как раз таки понять тему сложно...

Автор: gesper 3.9.2014, 16:11
Цитата(superVad @ 3.9.2014,  15:49)
Цитата(Rodman @  2.9.2014,  11:03 Найти цитируемый пост)
Модератор: Давайте вернёмся к теме обсуждения.

Я или русский за отпуск забыл или как раз таки понять тему сложно...

согласен, ничего не понятно....

И самое главное, если поделить на М и Ж список можно, то как программа понимать должна что объект уже Девушка, или еще Мальчик... не ясно  smile 

Автор: Аня17 4.9.2014, 09:40
как построить запрос ??? чтобы получить следующие поля 
Район, кол-во мужчин, кол-во женщин.


Код

var
   Ap,xl,sv,sm,podr1,podr2,C: Variant;// peremeni sv = пол жен sm = пол муж
   i: integer;
   f,j : TdateTime;
 begin
      Fstatic.DBGrid1.DataSource:=db.dataq;
      Edit3.text:='0';  Edit4.text:='0'; c:='0';
      sm:='0'; sv:='0'; podr1:='0'; podr2:='0';

 begin
      Ap := CreateOleObject('Excel.Application');
      Ap.Workbooks.Open('C:\exl\44.xls');
      Ap.Workbooks.Open('C:\exl\44.xls',1,true);
      Ap.Visible := true;
      Ap.DisplayAlerts := False;
 end;
 begin
      Fstatic.DBGrid1.DataSource:=db.dataq;
      try
        db.AdsQueryStatistic.SQL.Clear;
         db.AdsQueryStatistic.SQL.Add('SELECT podra, sex, count(*) as C FROM roj WHERE  d_reg between :f and :j GROUP BY podra, sex ORDER BY 1, 2');       //sex,podra, count(*) as VsegoPodr '+
              f := Trunc(DateTimePicker1.Date);
              j := Trunc(DateTimePicker2.Date);
        db.AdsQueryStatistic.Params.ParamByName('f').Value:= f;
        db.AdsQueryStatistic.Params.ParamByName('j').Value:= j;
        db.AdsQueryStatistic.Active:=True;
      except
      on e:Exception do
 end;

     db.AdsQueryStatistic.First;
        for I := 1 to db.AdsQueryStatistic.RecordCount do
           begin
          db.AdsQueryStatistic.FieldByName('C').Value
          //Edit1.Text := DataSource.DataSet.FieldByName('c').AsString;
             //C:=C+1;
     //Ap.Range['B3'] :=db.AdsQueryStatistic.FieldByName('C').Value;
end;
         begin

           end;
             if db.AdsQueryStatistic.FieldByName('sex').Value='Муж'  then
                 begin
                    sm:=sm+1;
                    Ap.Range['e11'] := sm; 
                 end;
                  begin
                     if db.AdsQueryStatistic.FieldByName('sex').Value='Жен'  then
                         begin
                            sv:=sv+1;
                            Ap.Range['f11'] := sv;
                          end;
       db.AdsQueryStatistic.next;
            end;
          end;
          end;




Автор: ТоляМБА 4.9.2014, 13:35
Добавляем переменные
Код
var
   rc, c : Integer;
   mypodra, sex : string;


Пример для нахождения первомайского района. С 32 строки в твоем примере пишем:

Код
rc := db.AdsQueryStatistic.RecordCount;
mypodra:= "Первомайский район";
for i:=1 to rc do //а ты уверена что с 1 а не с 0, я просто сейчас не могу проверить
begin
  if db.AdsQueryStatistic.FieldByName('podra').Value = mypodra then
  begin
     sex:=db.AdsQueryStatistic.FieldByName('sex').Value;
     c:=db.AdsQueryStatistic.FieldByName('C').Value;
     if sex = "Жен" then //так как sex у нас отсортирован по возрастанию, то сначала нам попадутся женщины
     begin
        Ap.Range['b2'] := c; //как я понял из прикрепленной картинки девочки в первомайском районе в ячейке B2 находятся
        continue;
     end;
     if sex = "Муж" then
     begin
        Ap.Range['c2'] := c; 
        break; //и жен и муж нашли, дальше можно записи не перебирать - выходим из цикла
     end;
  end;
  db.AdsQueryStatistic.next;
end;


Для нахождения других районов будешь их название приравнивать mypodra ну и Ap.Range менять. Как ты это организуешь уже другая песня.

Автор: Аня17 5.9.2014, 14:50
ага  smile пасибки, теперь придется сочинять что бы спеет песенку .

 smile  smile 

 а как на счет этого проектчика с источниками ??

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)