Hola
Aparte de lo dicho por Lepe que por supuesto es lógico yo intentaría variarlo asi:
Código Delphi
[-]
sql.Clear;
SQL.Text := 'INSERT INTO nota (cod_estudiante,cod_matricula,cod_periodo,cod_materia,nota,detalle)'+
'VALUES(:Cod_estudiante, :Cod_matricula, :Cod_periodo, :Cod_materia, :Nota, :detalle)';
for i := 1 to cant do
begin
Parameters[0].Value:= strtoint(sgNotas.Cells[1,i]);
Parameters[1].Value:= strtoint(sgNotas.Cells[0,i]);
Parameters[2].Value:= CodigoPeriodoEvaluacion(cbxPeriodoNotas.Text);
Parameters[3].Value:= CodigoMateriaNombre(cbxMateria.Text);
Parameters[4].Value:= StrToFloat(sgNotas.Cells[3,i]);
Parameters[5].Value:= sgNotas.Cells[4,i];
ExecSQL;
end;
Con Value evito el uso del concepto del campo, bueno, asi lo hago yo.
Saludos