Показать сообщение отдельно
  #15  
Старый 08.09.2014, 14:14
Heneken Heneken вне форума
Новичок
 
Регистрация: 11.09.2011
Сообщения: 73
Версия Delphi: Delphi XE6
Репутация: 10
По умолчанию

Цитата:
Сообщение от АНЯ17
Для нахождения других районов ??? не знаю пока
А что надо делать с Октябрьский район ????
// Ap.Range['b3'] := p;???
за ран спс.

Правильный запрос и понимание работы GROUP BY и ORDER BY гораздо проще решит вашу задачу без колдовства с before и прочим:
Код:
db.sql.tex:=' SELECT podra,sex, count(sex)   FROM roj  GROUP BY sex,podra ORDER BY podra '
db.active:=true;
Запрос выведет

Район - Пол - Количество
- Октябрьский / муж / 1000
- Октябрьский / жен / 200
- Петровский / муж / 300
- Петровский / жен / 2000
И т д.
GROB BY сгруппирует сначало по полу потом по району, ORDER BY упорядочит все ваши записи по району.

Далее в цикле:
Код:
while not db.Eof do //Ложь- когда цикл будет на последней строчке таблицы,если запрос ничего не вернет в цикл не зайдет
begin//С таким циклом не надо никаких First и last
db.fields[0].asstring //- тут ваш район
db.fields[1].asstring //- тут пол для конкретного района
db.fields[2].asstring //- тут количество по конкретному полу и району
db.next;//Я надеюсь что в ваших районах всегда хотя бы по 1 мужчине и женщине есть..поэтому 
//строки в таблице всегда будут парными =)
end;
В теле цикла можете использовать что хотите. Но если нужно по конкретному району(например для вставки в ваши Edit-ы),то достаточно добавить WHERE в запрос:

db.sql.tex:=' SELECT podra,sex, count(sex) FROM roj WHERE podra= UPPER('+quotedstr(Ansiuppercase('Октябрьский'))+') GROUP BY sex,podra ORDER BY podra'
db.active:=true;

quotedstr- Это операнд апострофов, код готов для вставки в Delphi =)
UPPER-Изменяет регистр букв.. для SQL чтоб уж 100% =)
Ansiuppercase()-Изменяет регистр букв для String.. чтоб уж 100% =)
Так гораздо проще и не надо извращаться с циклами и лишними условиями и писать можее сразу в Excel без кучи левых переменных.
Да и вообще судя по фото ,что вы хотите получить..достаточно привязать это сразу к DbGird без всяких циклов..только использование Last First уже обязательно,иначе выведет не все строки
P/S Код писал сразу на форуме,поэтом синтаксические ошибки не исключены)
Ответить с цитированием