我有一个Access2013多项选择测试Db,它以随机顺序将测试题返回到表单。这种方法工作正常,但对于提出的每个问题,答案每次都以相同的顺序显示。此特定数据库的每个表设置为:
tblTest (当然)
ID (主键)
课程
卷
问题号
部分
问题
Ans A
答案B
Ans C
Ans D
正确答案
我知道这不是优化的数据,因此无法随机化答案。一些网站建议拆分表格,所以我现在所做的是创建两个独立的表格,如下所示:
tblRnd_Ques
ID (主键)
课程
卷
问题号
部分
问题
tblRnd_Ans
ID (主键)
Q_ID (FK)
回答
正确(Y/N)
然后,我创建了通过随机化tblRnd_Ques.ID和tblRnd_Ans.Q_ID来随机化这两个表的查询,然后创建了一个连接这两个随机查询的查询。我想要做的是让问题显示在表单中,然后在qryRnd_Ans中找到答案,并按照答案在查询中出现的顺序返回答案。需要做的是显示问题,然后搜索记录集以找到下一个相关的答案,并将其作为答案# 2,依此类推。每个问题都有一个唯一的ID号,并在整个记录集中重复4次,得到相应的答案。
我已经在几个网站上寻找了这样做的方法,包括使用FindNext等,我是一个相当的VBA新手,不知道如何让它做我需要的。下面是我用来返回每个问题的代码(感谢前面的stackoverflow的帮助):
Private Sub LoadNextQuestion() 'reusable code to load questions
rcdCnt = rcdCnt + 1
If (rcdCnt > 100) Or rsCourse.EOF Then
GetQuestionTotal
LogTestResults
DoCmd.OpenReport "rptResults_Test"
rsCourse.Close
DoCmd.Close acForm, "frmIntro"
DoCmd.Close acForm, "frmQues"
DoCmd.OpenQuery "qryEmptyQuestions"
DoCmd.OpenQuery "qryEmptyResults"
DoCmd.CloseDatabase
Exit Sub
End If
With rsCourse
intQues = !ID
strCDC = !CDC
intVol = !Vol
strSect = !Section
strQues = !Question
strAns = !Answer
blnCorr = !Correct
ctlQ_No = rcdCnt
ctlQuestion = !Question
ctlSection = ![Section]
MsgBox intQues & _
Chr(13) & Chr(10) & "CDC: " & strCDC & _
Chr(13) & Chr(10) & "Volume: " & intVol & _
Chr(13) & Chr(10) & "Section: " & strSect & _
Chr(13) & Chr(10) & "Q: " & strQues & _
Chr(13) & Chr(10) & "A: " & strAns & _
Chr(13) & Chr(10) & blnCorr
ctlAns_A = ![Answer]
' ctlAns_B = ![Ans B] (Commented out for testing purposes)
' ctlAns_C = ![Ans C] (Commented out for testing purposes)
' ctlAns_D = ![Ans D] (Commented out for testing purposes)
strSect = ctlSection
strCorrectAnswer = ![Correct]
optAnswer = Null 'clears previous answer
optAnswer.SetFocus
.MoveNext
End With
End Sub我假设我可能需要一个用于答案的子表单,但不知道如何正确地生成问题和答案。任何我能得到的帮助我都深表感谢。
发布于 2017-11-19 03:56:18
我假定您在查询ORDER BY子句中使用了Rnd()函数。随机化ID上的答案,而不是Q_ID。然后使用子窗体/子报表容器主/子链接来同步记录。我进行了测试,不需要任何VBA。使用报告/子报告排列中的这些表打印调查问卷。看不到在表单/子表单中以随机顺序显示这些表有什么用处。如果要向试题库添加新的问题和答案,而不是用于用户回答,则需要此窗体/子窗体。
https://stackoverflow.com/questions/47369219
复制相似问题