Yo cambiaría el esquema completamente, usaría 2 Grids (uno para alumnos y otro para calificaciones), ambos con HideSelection a False.
Se formaría una relación Maestro-detalle entre ambos grids, de forma que al seleccionar un alumno, se mostrarían solo las calificaciones de ese alumno y del periodo elegido.
Consulta Alumnos (Maestro)
Código SQL
[-] select * from alumnos order by ...
Consulta de Calificaciones (Detalle)
Código SQL
[-]
select *
from calificaciones
where IdAlumno = :Alumno
and NumeroPeriodoEscolar = :Periodo
Cuando se hace clic en el Grid de Alumnos:
Código Delphi
[-]
qryDetalle.Close;
qryDetalle.parameters.Parambyname('Alumno').Value := qryMaestro.Fieldbyname('Id').Value;
qryDetalle.parameters.Parambyname('periodo').Value := SpinEdit1.Value; qryDetalle.Open;
IdAlumno debería ser clave ajena (foránea, foreign key) de la tabla Alumno. Además debe tener un índice secundario por ese campo para agilizar las búsquedas.
Saludos