Jennifer Gisler
Jennifer Gisler

Reputation: 1

ADODB.Field error '80020009'

Recently we have been getting this error: ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/PHET/mscripts/TestScoring.asp, line 52 

This specific file is used for 10 other tests and those do not error out. I have checked the database and everything looks good. Here is the actual page that is throwing the error...

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="DoSecure.asp" -->
<!--#include virtual="/lib/dbConnModules.asp" -->
<%
Dim rsAnswer__MMColParam
rsAnswer__MMColParam = Session("ModuleID")
Set rsAnswer = Server.CreateObject("ADODB.Recordset")
rsStrAnswer = "SELECT * FROM TestAnswers WHERE TestName = '" & Request.Form("testName") & "' and ApplicationID = '" & Session("ApplicationID") & "' and moduleID = '" + Replace(rsAnswer__MMColParam, "'", "''") + "'"
rsAnswer.open rsStrAnswer, dbConnModules
answerArray = array(rsAnswer("AnswerQ1"), rsAnswer("AnswerQ2"), rsAnswer("AnswerQ3"), rsAnswer("AnswerQ4"), rsAnswer("AnswerQ5"), rsAnswer("AnswerQ6"), rsAnswer("AnswerQ7"), rsAnswer("AnswerQ8"), rsAnswer("AnswerQ9"), rsAnswer("AnswerQ10"), rsAnswer("AnswerQ11"), rsAnswer("AnswerQ12"), rsAnswer("AnswerQ13"), rsAnswer("AnswerQ14"), rsAnswer("AnswerQ15"), rsAnswer("AnswerQ16"), rsAnswer("AnswerQ17"), rsAnswer("AnswerQ18"), rsAnswer("AnswerQ19"), rsAnswer("AnswerQ20"))
testArray = array(Request.Form("Q1"), Request.Form("Q2"), Request.Form("Q3"), Request.Form("Q4"), Request.Form("Q5"), Request.Form("Q6"), Request.Form("Q7"), Request.Form("Q8"), Request.Form("Q9"), Request.Form("Q10"), Request.Form("Q11"), Request.Form("Q12"), Request.Form("Q13"), Request.Form("Q14"), Request.Form("Q15"), Request.Form("Q16"), Request.Form("Q17"), Request.Form("Q18"), Request.Form("Q19"), Request.Form("Q20"))
if not rsAnswer.EOF then
    myCorrect = 0
    For i=0 To (rsAnswer("NumOfQs") - 1)
        'Response.Write(i+1 & Request.Form("q" & i+1) & "<br />")
        If isNull(answerArray(i)) then answerArray(i) = "" End If
        If answerArray(i) = testArray(i) Then
            myCorrect = myCorrect + 1
        End if
    Next
    'Response.Write(myCorrect)
end if  
'Response.Write(myCorrect)
%>
<%
strTestRecord = "insert into TestRecords (ApplicationID, ModuleID, TestName, UserEmail, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q20, Debugger, numberCorrect) values ('" &_ 
        Session("ApplicationID") & "', '"&_
        Session("ModuleID") & "', '"&_
        Replace(Request.Form("testName"), "'", "''") & "', '"&_
        Session("UserEmailAddr") & "', '"&_
        Replace(Request.Form("Q1"), "'", "''") & "', '" &_
        Replace(Request.Form("Q2"), "'", "''") & "', '" &_
        Replace(Request.Form("Q3"), "'", "''") & "', '" &_
        Replace(Request.Form("Q4"), "'", "''") & "', '" &_
        Replace(Request.Form("Q5"), "'", "''") & "', '" &_
        Replace(Request.Form("Q6"), "'", "''") & "', '" &_
        Replace(Request.Form("Q7"), "'", "''") & "', '" &_
        Replace(Request.Form("Q8"), "'", "''") & "', '" &_
        Replace(Request.Form("Q9"), "'", "''") & "', '" &_
        Replace(Request.Form("Q10"), "'", "''") & "', '" &_
        Replace(Request.Form("Q11"), "'", "''") & "', '" &_
        Replace(Request.Form("Q12"), "'", "''") & "', '" &_
        Replace(Request.Form("Q13"), "'", "''") & "', '" &_
        Replace(Request.Form("Q14"), "'", "''") & "', '" &_
        Replace(Request.Form("Q15"), "'", "''") & "', '" &_
        Replace(Request.Form("Q16"), "'", "''") & "', '" &_
        Replace(Request.Form("Q17"), "'", "''") & "', '" &_
        Replace(Request.Form("Q18"), "'", "''") & "', '" &_
        Replace(Request.Form("Q19"), "'", "''") & "', '" &_
        Replace(Request.Form("Q20"), "'", "''") & "', '" &_
        Request.Form("Debugger") & "', " & myCorrect & ")"      
Session("NumOfQs") = rsAnswer("NumOfQs")
Session("NumToPass") = rsAnswer("NumToPass")

Session("YourScore") = myCorrect

if myCorrect > Session("NumToPass") then pf = "pass" else pf = "fail" end if ' PASS OR FAIL
strTestRecordComplete = "insert into CheckRequirements (ApplicationID, UserEmail, ModuleID, RequirementName, PassOrFail, OperationalIPAddr) values ('" & Session("ApplicationID") & "', '" & Session("UserEmailAddr") & "', '" & Session("ModuleID") & "', '"& Request.Form("testName") & "', '" & pf & "', '" & Request.ServerVariables("REMOTE_ADDR") & "')"
dbConnModules.Execute(strTestRecord)
dbConnModules.Execute(strTestRecordComplete)
if Request.Form("TestName") = "pretest" Then
    Response.Redirect("../" & Session("ModuleDir") & "/TestResults.asp?fr=pre&desturl="& Request.Form("desturl"))
elseif Request.Form("TestName") = "posttest" Then
    Session("rsYourAnswers") = testArray
    Response.Redirect("../" & Session("ModuleDir") & "/TestResults.asp?fr=post&desturl="& Request.Form("desturl"))
End If
%>
<%
rsAnswer.Close()
Set rsAnswer = Nothing
%>
<!--#include virtual="/lib/dbConnModulesClose.asp" -->

Any ideas? Thanks.

Upvotes: 0

Views: 11521

Answers (1)

Shadow Wizzard
Shadow Wizzard

Reputation: 66388

You access the recordset on two places without checking if its contains any records. Just move the code accessing the recordset into the condition you already have:

rsAnswer.open rsStrAnswer, dbConnModules
testArray = array(Request.Form("Q1"), Request.Form("Q2"), Request.Form("Q3"), Request.Form("Q4"), Request.Form("Q5"), Request.Form("Q6"), Request.Form("Q7"), Request.Form("Q8"), Request.Form("Q9"), Request.Form("Q10"), Request.Form("Q11"), Request.Form("Q12"), Request.Form("Q13"), Request.Form("Q14"), Request.Form("Q15"), Request.Form("Q16"), Request.Form("Q17"), Request.Form("Q18"), Request.Form("Q19"), Request.Form("Q20"))
if not rsAnswer.EOF then
    answerArray = array(rsAnswer("AnswerQ1"), rsAnswer("AnswerQ2"), rsAnswer("AnswerQ3"), rsAnswer("AnswerQ4"), rsAnswer("AnswerQ5"), rsAnswer("AnswerQ6"), rsAnswer("AnswerQ7"), rsAnswer("AnswerQ8"), rsAnswer("AnswerQ9"), rsAnswer("AnswerQ10"), rsAnswer("AnswerQ11"), rsAnswer("AnswerQ12"), rsAnswer("AnswerQ13"), rsAnswer("AnswerQ14"), rsAnswer("AnswerQ15"), rsAnswer("AnswerQ16"), rsAnswer("AnswerQ17"), rsAnswer("AnswerQ18"), rsAnswer("AnswerQ19"), rsAnswer("AnswerQ20"))
    myCorrect = 0
    For i=0 To (rsAnswer("NumOfQs") - 1)
        'Response.Write(i+1 & Request.Form("q" & i+1) & "<br />")
        If isNull(answerArray(i)) then answerArray(i) = "" End If
        If answerArray(i) = testArray(i) Then
            myCorrect = myCorrect + 1
        End if
    Next
    'Response.Write(myCorrect)
    Session("NumOfQs") = rsAnswer("NumOfQs")
    Session("NumToPass") = rsAnswer("NumToPass")
Else  
    Session("NumOfQs") = 0
    Session("NumToPass") = 0
End If

Remember to remove those two lines from the end of your original code:

Session("NumOfQs") = rsAnswer("NumOfQs")
Session("NumToPass") = rsAnswer("NumToPass")

As it's now added to the "main" block.

Upvotes: 0

Related Questions