是否可以使用现有Recordset中的变量创建新的Recordset?

时间:2017-11-20 16:46:45

标签: vba ms-access access-vba

我有一个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和我搜索的其他网站。

1 个答案:

答案 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