我有一个Db供个人测试他们所学的课程。此Db从介绍表单中获取输入,从查询中选择数据,并将其传递给测试表单。这非常有效(非常感谢@xpofer)因为它会随机返回问题,但答案总是按照相同的顺序排列。这是因为Recordset所基于的表和查询包含以下列:
表格
ID
CDC
卷
问题编号(查询中随机)
科
问题
答案
答案
Ans C
Ans D
正确答案
我要做的不仅是随机提出问题,还要随机提出答案。为此,我将其分为两个单独的表格。
tblRnd_Ques
ID(PK)
CDC
卷
问题编号
科
问题
tblRnd_Ans
ID
Q_ID(FK)
答案
正确(是/否)
以下是我尝试使用的查询。
qryRnd_Ques
ID
CDC
卷
问题编号
科
问题
Rnd_ID(随机ID,升序)
qryRnd_Ans
Rnd_ID(随机ID,升序)
Q_ID
答案
正确(是/否)
现在出现问题。是否可以使用前一个Recordset中的变量创建Recordset?这是我目前的代码:
Private Sub GetAnswers()
Dim rsAns As Recordset
Dim strAns As String
Dim strSQL As String
Dim intQues As Long
Dim isCorr As Boolean
intQues = !ID
strSQL = "Select [ID], [Answer], [Correct] FROM [qryRnd_Ans] WHERE [Q_ID] = " & intQues
Set rsAns = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
strAns = !Answer
isCorr = !Correct
MsgBox "Answer: " & strAns _
& Chr(13) & Chr(10) & "Correct: " & isCorr
rsAns.Close
End Sub
我已经尝试直接在LoadNextQuestion子中创建第二个Recordset(rsAns),我现在调用GetAnswers。我一直在
运行时错误3464:条件表达式中的数据类型不匹配
使用此代码:
strSQL = "Select [ID], [Answer], [Correct] FROM [qryRnd_Ans] WHERE [Q_ID] = '" & intQues & "'"
Set rsAns = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
我想我可能需要将此代码放在子例程中,因此调用GetAnswers。使用此代码,我得到一个Compile错误:strAns =!Answer行的无效或不合格的引用。我搜索了许多网站,包括Microsoft,CNet,bytes.com以及Stackoverflow,看起来好像语法是正确的,所以我对这个问题感到茫然。任何帮助表示赞赏。
更新
经过多次单独和互联网搜索后,我找到了解决方案。我从strAns =更改了变量值!答案为strAns = rsAns![答案],这一切都落到了位置。非常感谢DanielG和我搜索的其他网站。
答案 0 :(得分:0)
因为它是一个int,你试过单引号:
strSQL = "Select [ID], [Answer], [Correct] FROM [qryRnd_Ans] WHERE [Q_ID] = " & intQues
要获取记录集中的所有答案,您现在可以迭代记录集:
If Not (rsANS.EOF And rsANS.BOF) Then
Do Until rsANS.EOF = True
' Get the next answer and do something with it
' Me!MyTextBox = rsANS!MyNextAnswer
rsANS.MoveNext
Loop
End If