Pretty sure it is the use of the param in your pass formula. It is determined at runtime hence it cannot be used as a select criteria in a formula.
First you need to clean up the formulas with the NULL option. Crystal stops evaluating on the NULL so if you use it as a condition you have to use it first....
if isnull({Command.GP1_MARK}) then
0
else
if {Command.GP1_MARK} in ["A+","A-","A","B+","B-","B","C+","C-","C","D+","D-","D"] THEN
1 else 0
Or you can change the setting on your formulas to 'Use default values for Nulls' which I would recommend then you do not have to worry about Nulls at all.
Get rid of your PASS formula and imbed the whole selection in the select expert something like this:
({?pSemester} = "Year Long" and
{@gp1} + {@gp2} + {@gp3} + {@gp4} + {@gp5} + {@gp6} + {@final} + {@midterm} > 4)
or
({?pSemester} = "First" and
(
{@gp1} + {@gp2} +
{@gp3} + tonumber({@midterm}) >= 3) or (tonumber(
{@midterm}) = 1 and tonumber({@gp1} + {@gp2} + {@gp3}) > 0)
or
({?pSemester} = "Second" and tonumber(
{@gp4} + {@gp5} + {@gp6}) + tonumber({@final}) >= 3) or (tonumber(
{@final}) = 1 and tonumber({@gp4} + {@gp5} + {@gp6}) > 0)
)
or make a formula for each of the pass fails without the param and you can use those in the select expert
e.g.
@YearLongPass as
if {@gp1} + {@gp2} + {@gp3} + {@gp4} + {@gp5} + {@gp6} + {@final} + {@midterm} > 4 then TRUE
@SemesterFirstPass as
if tonumber({@gp1} + {@gp2} + {@gp3}) + tonumber({@midterm}) >= 3 then TRUE
else if tonumber({@midterm}) = 1 and tonumber({@gp1} + {@gp2} + {@gp3}) > 0 then TRUE
@SemesterSecondPass as
if tonumber({@gp4} + {@gp5} + {@gp6}) + tonumber({@final}) >= 3 then TRUE
else if tonumber({@final}) = 1 and tonumber({@gp4} + {@gp5} + {@gp6}) > 0 then TRUE
Then your select criteria would be: