Delphi/ClientDataSet

Добрый день!
Хочу вывести в Excel для каждого студента числа.
У меня есть таблица в бд, где я храню IdStudent (10 студентов) и FIO, в другой таблице - дни месяца ( далее буду помечать был/не был)
Есть хранимая процедура, spSLC - выборка только IdStudent
Есть так же хранимая процедура spAll - все дни с пометкой выходные
Делаю так, но это для IdStudent = 1, а у меня их 10
Как сделать для 10?

spAll.Parameters.ParamByName('@IdStudent').Value := 1;
cdsAll.Open;
  for i := 1 to countDay do
  begin
    ExcelApp.WorkBooks[1].WorkSheets[1].Cells[1,j ] :=
      cdsAll.FieldByName('data').AsString;
end;

j что за переменная?
где cdsSlc.Next?
если в cdsAll список дней, тогда зачем цикл for? за тем же принципом while not cdsAll.Eof do... работать?

судя по описанию, в spAll ІДстудента не используется:

Есть так же хранимая процедура spAll - все дни с пометкой выходные

Решила эту проблему, но возникла другая

чтобы вот так выводить
image

може там и записей то нету с другими ІД;)

Так а запрос-то какой в этом spAll?

select IdStudent, Data,
MAX(
Case WHEN A.Data between DateStart and DateEnd
THEN StrInTab
ELSE Case WHEN IsHoliday = 0 THEN ’ Я’ ELSE ’ В’ END
END
) as Str

ВЫбираются id, дата и ‘Выходной, рабочий’

Записи есть, не заходит в if

сначала закрыли cdsAll
cdsAll.Close;
но открываете
DM.cdsAllDay.Open; - так должно быть?

смотрели что лежит в cdsSlc.FieldByName('IdStudent').AsInteger на каждой итерации?

Да, на первой итерации 1 и выполняется if,
На остальных итерациях id увеличивается, но почему-то cdsAll пустой

Посмотрела, решила убрать первый cds.close
Все заработало
Спасибо🤩
Только перезаписывает все в одни ячейки

я предлагал Вам вариант кода. Он не заработал?

1 лайк

Спасибо за идею, немного по-другому сделала и все заработало