需要帮助返回ms-access测试库

时间:2017-11-18 17:51:26

标签: access-vba ms-access-2013

我有一个Access2013多项选择测试Db,它以随机顺序将测试问题返回给表单。这样可以正常工作,但对于每个问题,每次都会以相同的顺序显示答案。此特定Db的每个表都设置为:

tblTest(当然)

ID(PK)

问题否

问题

答案

答案

Ans C

Ans D

正确答案

我知道这不是优化数据,因此无法随机化答案。有些网站建议拆分表,所以我现在所做的就是创建两个单独的表,如下所示:

tblRnd_Ques

ID(PK)

问题编号

问题

tblRnd_Ans

ID(PK)

Q_ID(FK)

答案

正确(是/否)

然后,我创建了通过随机化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

我假设我可能需要一个子表单来获得答案,但不知道如何正确地生成问题和答案。我能得到的任何帮助都深表感谢。

1 个答案:

答案 0 :(得分:0)

我假设您在查询ORDER BY子句中使用Rnd()函数。随机化ID的答案,而不是Q_ID。然后使用子表单/子报表容器主/子链接来同步记录。我测试过,不需要任何VBA。在报告/子报告排列中使用这些表来打印问卷。没有看到以随机顺序在表单/子表单中显示这些表是如何有用的。如果向测试库添加新问题和答案,则需要此表单/子表单,而不是用户响应。