Link to home
Start Free TrialLog in
Avatar of RickyGtz
RickyGtz

asked on

Overflow Division by Zero

I am trying to figure out why is that my code gets an overflow, I know somehow is dividing by a null or zero value , but I want it to actually get the value from a variable.

I think the error is whitin line 163 , so I commented out
set rs = Server.CreateObject("ADODB.Recordset")
sql = "SELECT * from Scores WHERE SSN = '" & session("username") & "'"
rs.Open sql,conSQL,3,3
if rs.recordcount = 0 then trigger = 2
					'---------------------------------------
if trigger <> 2 then
		dim eagleCount, birdieCount, parCount, bogeyCount, doubleCount, otherCount, totalCount
		'right here...............dim avg18, low18, high18
		eagleCount = 0
		birdieCount = 0
		parCount = 0
		bogeyCount = 0
		doubleCount = 0
		otherCount = 0
		totalCount = 0
		
		rs.movefirst
		while not rs.eof
			call breakdown
			rs.movenext
		wend
	
	
		dim numRecords18
		dim numRecords9
		dim average18
		dim average9
		dim lowRound18
		dim lowRound9
		dim highRound18
		dim highRound9
		
	call findCount("Full", "Full", numRecords18)
	call findAverage("Full", "Full", numRecords18, average18)
	call findLowest("Full", "Full", lowRound18)
	call findHighest("Full", "Full", highRound18)
	call findCount("Front", "Back", numRecords9)
	call findAverage("Front", "Back", numRecords9, average9)
	call findLowest("Front", "Back", lowRound9)
	call findHighest("Front", "Back", highRound9)
	
		dim average3
		dim average4
		dim average5
		
		call findAllTHIS(3, finalAverage)
		average3 = finalAverage
		call findAllTHIS(4, finalAverage)
		average4 = finalAverage
		call findAllTHIS(5, finalAverage)
		average5 = finalAverage
end if				'---------------------------------------
	
sub breakdown()
	dim startHere
	dim endHere
	dim difference
	dim hole
	
		if rs("Round") = "Full" then 
			startHere = 1
			endHere = 18
		elseif rs("Round") = "Front" then
			startHere = 1
			endHERE = 9
		else
			startHERE = 10
			endHERE = 18
		end if
		
		set rs2 = Server.CreateObject("ADODB.Recordset")
		sql2 = "SELECT * from CourseHoles WHERE CourseID =" & rs("CourseID") & " AND Difficulty = 'Par'"
		rs2.Open sql2, conSQL
		
		for hole = startHere to endHere
			difference = cint(rs("H" & hole)) - cint(rs2("h" & hole))
			select case difference
				case -2
					eagleCount = eagleCount + 1
				case -1
					birdieCount = birdieCount + 1
				case 0
					parCount = parCount + 1
				case 1
					bogeyCount = bogeyCount + 1
				case 2
					doubleCount = doubleCount + 1
				case else
					otherCount = otherCount + 1
			end select
		next
		totalCount = eagleCount + birdieCount + parCount + bogeyCount + doubleCount + otherCount
		rs2.close
		set rs2 = nothing
end sub	
	
sub findCount(theCase1, theCase2, byref numRecords)
	numRecords = 0
	rs.movefirst
	while not rs.eof
		if rs("Round") = theCase1 or rs("Round") = theCase2 then numRecords = numRecords + 1
		rs.movenext
	wend
end sub
 
 
sub findAverage(theCase1, theCase2, theCount, byref theAverage)
	dim total
	total = 0
	rs.movefirst
	while not rs.EOF
		if rs("Round") = theCase1 or rs("Round") = theCase2 then total = total + cint(rs("Total"))
		rs.movenext
	wend
	if thecount = 0 then theAverage = 0 else theAverage = total/theCount
end sub
 
sub findLowest(theCase1, theCase2, byref theLowest)
	dim lowest
	rs.movefirst
	lowest = 1000
	while not rs.eof
		if rs("Total") < lowest and (rs("Round") = theCase1 or rs("Round") = theCase2) then lowest = rs("Total")
		rs.movenext
	wend
	if lowest = 1000 then theLowest = "-" else theLowest = lowest
end sub
 
sub findHighest(theCase1, theCase2, byref theHighest)
	dim highest
	rs.movefirst
	highest = -1000
	while not rs.eof
		if rs("Total") > highest and (rs("Round") = theCase1 or rs("Round") = theCase2) then highest = rs("Total")
		rs.movenext
	wend
	if highest = "-1000" then theHighest = "-" else theHighest = highest
end sub
 
sub findAllTHIS(findTHIS, finalAverage)
		dim grandTotal
		dim totalCountTHIS
		grandTotal = 0
		totalCountTHIS = 0
		rs.movefirst
		while not rs.eof
		recordTotal = 0
		countTHIS = 0
			call findTHISaverage(findTHIS, recordTotal, countTHIS)
			grandTotal = grandTotal + recordTotal
			totalCountTHIS = totalCountTHIS + countTHIS
			rs.movenext
		wend
	'I have to look at here to see why in dividing by a zero value
	
		finalAverage = grandTotal/totalCountTHIS
end sub
 
sub findTHISaverage(findTHIS, recordTotal, countTHIS)
	dim startHere
	dim endHere
	
 
		if rs("Round") = "Full" then 
			startHere = 1
			endHere = 18
		elseif rs("Round") = "Front" then
			startHere = 1
			endHERE = 9
		else
			startHERE = 10
			endHERE = 18
		end if
		
		set rs2 = Server.CreateObject("ADODB.Recordset")
		sql2 = "SELECT * from CourseHoles WHERE CourseID =" & rs("CourseID") & " AND Difficulty = 'Par'"
		rs2.Open sql2, conSQL
		
		for hole = startHere to endHere
			if rs2("h" & hole) = findTHIS then 
				recordTotal = recordTotal + rs("H" & hole)
				countTHIS = countTHIS + 1
			end if
		next
		'response.write(recordTotal & "." & count3 & "..." )
		
		rs2.close
		set rs2 = nothing
end sub
 
		rs.close
		set rs = nothing
 
%>

Open in new window

Avatar of BobTheViolent
BobTheViolent
Flag of United States of America image

I highly recommend using some Try Catch blocks in your code, especially when there is the possibility of something so simple as a div by zero error.

Try something like this code:


Try
 
  finalAverage = grandTotal/totalCountTHIS
 
Catch ex As System.DivideByZeroException
 
  finalAverage = 0 'Set it to 0 or you could do something else here...
 
End Try

Open in new window

Avatar of RickyGtz
RickyGtz

ASKER

I dont think vbasic has try catch statments. I am using classic asp and visual basic
ASKER CERTIFIED SOLUTION
Avatar of BobTheViolent
BobTheViolent
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial