Цитата:
Сообщение от АНЯ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 Код писал сразу на форуме,поэтом синтаксические ошибки не исключены)