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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2009, 19:01   #31
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
А для чего локейтить, Soleil? Чтобы транспонировать записи?
именно
так у тебя набор данных располагается по строчкам, а ты его развернешь таким образом по столбцам в одну строчку

апд
и этта...
чтобы суммы считались нормально есес-но групбай не пропусти в самом конце, а чтобы не было дублей на выходе сразу после селекта пиши first 1 - select first 1 ...

Последний раз редактировалось soleil@mmc; 14.11.2009 в 21:15.
soleil@mmc вне форума Ответить с цитированием
Старый 15.11.2009, 20:41   #32
pesi
Подтвердите свой е-майл
 
Регистрация: 05.03.2009
Сообщений: 65
По умолчанию

вот это посмотри может подойдет baza.rar
pesi вне форума Ответить с цитированием
Старый 17.11.2009, 18:04   #33
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
pesi
, я использовал Ваш код из вложения, но возникла проблема. В StringGrid заносится только первая строчка. Вторая нет. Как сделать, чтобы все строчки заносились?
Код:
Код:
procedure TForm1.sBitBtn62Click(Sender: TObject);
var
 c,r: integer;
begin
 Form1.pFIBDataSet_raschet.Close;
 Form1.pFIBDataSet_raschet.Open;
 r:=1;
 Form1.pFIBDataSet_raschet.First;
 while not Form1.pFIBDataSet_raschet.Eof do
 begin
  for c:=0 to 4 do
   Form1.SG2.Cells[c,r]:=Form1.pFIBDataSet_raschet.Fields.Fields[c].AsString;
   Form1.pFIBDataSet_raschet.Next;
   Inc(r);
 end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 17.11.2009, 19:44   #34
pesi
Подтвердите свой е-майл
 
Регистрация: 05.03.2009
Сообщений: 65
По умолчанию

а в DBGrid проверял, туда все записи выбираются?
pesi вне форума Ответить с цитированием
Старый 18.11.2009, 05:43   #35
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

В смысле вывести результат в дбгрид? В него все выводится. Но мне нужно в стринггрид перенести результат, так Как дальнейшая работа идет с ним в программе. На данный момент мне удалось сделать следующее: в StringGrid заносятся значения из DBGrida. То есть те значения, которые получаются при запросе. Проблема в том, что заносится везде одинаковая только первая строчка. Во вложении два варианта: неправильный (то как работает у меня сейчас) и неправильный (то как должно быть). Вот как добиться второго варианта? . Мой код:
Код:
procedure TForm1.sBitBtn62Click(Sender: TObject);
var
 c,r: integer;
begin
 for r:=1 to Form1.pFIBDataSet_raschet.VisibleRecordCount do
 begin
  Form1.SG2.Cells[0,r]:=Form1.pFIBDataSet_raschet.FieldByName('DVOEK').AsString;
  Form1.SG2.Cells[1,r]:=Form1.pFIBDataSet_raschet.FieldByName('TROEK').AsString;
  Form1.SG2.Cells[2,r]:=Form1.pFIBDataSet_raschet.FieldByName('CHETVEROK').AsString;
  Form1.SG2.Cells[3,r]:=Form1.pFIBDataSet_raschet.FieldByName('PYTEROK').AsString;
 end;
end;
Изображения
Тип файла: jpg Безымянный.JPG (35.0 Кб, 52 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 18.11.2009 в 07:10.
artemavd вне форума Ответить с цитированием
Старый 18.11.2009, 09:54   #36
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

artemavd, я не знаю, что такое VisibleRecordCount, но а где переход на следующую запись в датасете?!?
Form1.pFIBDataSet_raschet.Next ???!
да и перед циклом неплохо было бы поставить указатель на первую запись:
Form1.pFIBDataSet_raschet.First
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.11.2009, 11:17   #37
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Сергей, я делал так:
Код:
procedure TForm1.sBitBtn62Click(Sender: TObject);
var
 c,r: integer;
begin
 for r:=1 to Form1.pFIBDataSet_raschet.VisibleRecordCount do
 begin
 Form1.pFIBDataSet_raschet.First;

  Form1.SG2.Cells[0,r]:=Form1.pFIBDataSet_raschet.FieldByName('DVOEK').AsString;
  Form1.SG2.Cells[1,r]:=Form1.pFIBDataSet_raschet.FieldByName('TROEK').AsString;
  Form1.SG2.Cells[2,r]:=Form1.pFIBDataSet_raschet.FieldByName('CHETVEROK').AsString;
  Form1.SG2.Cells[3,r]:=Form1.pFIBDataSet_raschet.FieldByName('PYTEROK').AsString;
 end;
Form1.pFIBDataSet_raschet.Next;
end;
Но результат был не тот
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.11.2009, 11:47   #38
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Так не лучше будет?
Код:
procedure TForm1.sBitBtn62Click(Sender: TObject);
var
 c,r: integer;
begin
 Form1.pFIBDataSet_raschet.First;
 for r:=1 to Form1.pFIBDataSet_raschet.VisibleRecordCount do
 begin
  Form1.SG2.Cells[0,r]:=Form1.pFIBDataSet_raschet.FieldByName('DVOEK').AsString;
  Form1.SG2.Cells[1,r]:=Form1.pFIBDataSet_raschet.FieldByName('TROEK').AsString;
  Form1.SG2.Cells[2,r]:=Form1.pFIBDataSet_raschet.FieldByName('CHETVEROK').AsString;
  Form1.SG2.Cells[3,r]:=Form1.pFIBDataSet_raschet.FieldByName('PYTEROK').AsString;
  Form1.pFIBDataSet_raschet.Next;
 end;
end;
pu4koff вне форума Ответить с цитированием
Старый 21.11.2009, 09:27   #39
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

pu4koff, да, так лучше . Спасибо. А вот такой вопрос: есть список класса в DBGridEh-e. Возможно ли сделать в таймере так, чтобы например каждую секунду из DBGridEh-а брались ФИО ученика и для него расчитывалось количество оценок по коду в посте №38, а в итоге в другой DBGridEh выводилось и ФИО и количество оценок? Все, что мне нужно, это чтобы напротив подсчитанного количества оценок показывалось ФИО ученика, для которого соответствует подсчитанное количество. А то непонятно по результату запроса для какого ученика посчитано это самое количество.

Решил одну часть поставленной мною выше проблемы таким запросом:
Код:
select
  familiy,imy,otchest,
  sum(case when m.ocenka = 2 then 1 else 0 end) DVOEK,
  sum(case when m.ocenka = 3 then 1 else 0 end) TROEK,
  sum(case when m.ocenka = 4 then 1 else 0 end) CHETVEROK,
  sum(case when m.ocenka = 5 then 1 else 0 end) PYTEROK
from
  mark m,
  chetverty c,
  spisok s,
  classname cl,
  predmety p
WHERE 0=0 
    and m.onchetvert=c.id
    and m.onpredmet=p.id
    and m.withspisok=s.id
    and cl.id=s.kl
    and kl=1
    and m.onchetvert=1
    and m.onpredmet=2
    and m.datamark >= '01.11.2009'
    and m.datamark <= '10.11.2009'
group by s.familiy,s.imy,s.otchest


А как сделать, чтобы точно так же в этом запросе еще считалось количество "н"-ок?
Код:
select
  familiy,imy,otchest,
  sum(case when m.ocenka = 2 then 1 else 0 end) DVOEK,
  sum(case when m.ocenka = 3 then 1 else 0 end) TROEK,
  sum(case when m.ocenka = 4 then 1 else 0 end) CHETVEROK,
  sum(case when m.ocenka = 5 then 1 else 0 end) PYTEROK
from
  mark m,
  chetverty c,
  spisok s,
  classname cl,
  predmety p
WHERE 0=0 
    and m.onchetvert=c.id
    and m.onpredmet=p.id
    and m.withspisok=s.id
    and cl.id=s.kl
    and kl=1
    and m.onchetvert=1
    and m.onpredmet=2
    and m.datamark >= '01.11.2009'
    and m.datamark <= '10.11.2009'
group by s.familiy,s.imy,s.otchest
Ругается сервер на несоответствие типов данных. Ведь у меня в колонку OCENKA вводятся как цифры (5,4,3,2) так и буква(н). Нужно, чтобы наряду с оценками считались "н".
P.S. Как удалить свои повторяющиеся сообщения?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось mihali4; 26.11.2009 в 11:50.
artemavd вне форума Ответить с цитированием
Старый 23.11.2009, 15:43   #40
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Артём, я правильно понял, что в таблице MARK поле ocenka НЕ ЧИСЛОВОЕ, а текстовое?!

тогда поможет такой запрос:
Код:

select
  familiy,imy,otchest,
  sum(case when m.ocenka = '2' then 1 else 0 end) DVOEK,
  sum(case when m.ocenka = '3' then 1 else 0 end) TROEK,
  sum(case when m.ocenka = '4' then 1 else 0 end) CHETVEROK,
  sum(case when m.ocenka = '5' then 1 else 0 end) PYTEROK,
  sum(case when m.ocenka = 'Н' then 1 else 0 end) PROPUSKOV
...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложный расчет З/П VictorM Microsoft Office Excel 7 08.11.2009 16:51
Расчет зума Саня_Д Microsoft Office Excel 4 21.10.2009 15:21
Расчет количества в БД Excell, использование сводных таблиц? ITM Microsoft Office Excel 10 12.01.2009 14:41
Расчет средневзешенного zoman Microsoft Office Excel 2 05.12.2007 10:15