2013-04-03 59 views
0

最近我們已經收到此錯誤: ADODB.Field錯誤「80020009」ADODB.Field錯誤「80020009」

BOF或EOF爲True,或者當前的記錄已被刪除。請求的操作需要當前記錄。

/PHET/mscripts/TestScoring.asp, line 52 

此特定文件用於其他10個測試,並且不會出錯。我檢查了數據庫,一切都很好。這裏是引發錯誤的實際頁面...

<%@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" --> 

任何想法?謝謝。

+0

這是您的代碼中需要複製和調試的邏輯錯誤。除非我在代碼中丟失了一些非常明顯的東西,否則這個問題不適合您在SO上獲得的幫助。我希望有人能幫助你,但那是我想的帽子。我想我可以說明顯而易見,並說這個錯誤意味着你試圖訪問不存在的記錄集中的一行。我已經看到關閉或空記錄集的這個錯誤。 – 2013-04-03 20:36:11

+0

那麼哪條線是52線? – 2013-04-04 07:01:19

回答

0

您可以在兩個地方訪問記錄集,而不檢查它是否包含任何記錄。您只需將代碼訪問記錄轉移到條件你已經有了:

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 

記得從你的原代碼的結尾處,刪除這兩條線:

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

,因爲它是現在已添加到「主「塊。