记录数量返回太多记录

twr*_*eid 1 ms-access vba access-vba ms-access-2013

您好我在MS Access 2013中的表单中有一些vba代码,出于某种原因,当我得到一个记录集时,它报告30行,当数据库真的只有1行并且我已经验证了这一点.

当我进行调试打印以查看id时,它只是重复30次的相同记录.

下面是运行的代码.

Option Compare Database

Dim selectPlacement As QueryDef
Dim rs As Recordset

Private Sub Form_Current()
    Set selectPlacement = CurrentDb.QueryDefs("SelectPlacement")
    Me.AddPlacementForm.Form.Visible = False

    selectPlacement.Parameters!stu = Me.student_id.Value
    selectPlacement.Parameters!sem = Me.semester_id.Value
    Me.AddPlacementForm.Form!lstStudent.Value = Me.student_id
    Me.AddPlacementForm.Form!cmbSemester.Value = Me.semester_id
    Me.PlacementsBlock1.Form.Filter = "[semester_id]= '" & Me.semester_id.Value & "'"
    Me.PlacementsBlock2.Form.Filter = "[semester_id]= '" & Me.semester_id.Value & "'"
    Me.PlacementsBlock1.Form.FilterOn = True
    Me.PlacementsBlock2.Form.FilterOn = True

    Set rs = selectPlacement.OpenRecordset
    Call SetUpPlacements(rs)
    rs.Close
    Set selectPlacement = Nothing
End Sub

Private Sub SetUpPlacements(rs As Recordset)
    If rs.RecordCount = 0 Then
        Me.PlacementsBlock1.Form.Visible = False
        Me.PlacementsBlock2.Form.Visible = False
        Me.AddPlacementForm.Form.Visible = True
    ElseIf rs.RecordCount = 1 Then
        rs.MoveFirst
        If rs!block = 1 Then
            Me.PlacementsBlock1.Form.Visible = False
        Else
            Me.PlacementsBlock2.Form.Visible = False
        End If
        Me.AddPlacementForm.Form.Visible = True
    Else
        Me.PlacementsBlock1.Form.Visible = True
        Me.PlacementsBlock2.Form.Visible = True
        Me.AddPlacementForm.Form.Visible = False
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

以下是查询def中的查询.

SELECT *
FROM student_placements
WHERE (((student_placements.student_id)=[stu]) AND ((student_placements.semester_id)=[sem]));
Run Code Online (Sandbox Code Playgroud)

任何有关这方面的帮助将非常感激.

MP2*_*P24 5

您正在使用记录集而没有正确初始化,因此您的调用rs.RecordCount不会返回正确的值.

您需要通过检查空记录集 If rs.EOF and rs.BOF Then.要获得正确的记录计数,您需要致电rs.MoveLast.之前,记录计数不可靠.

有关更多信息,请参见http://allenbrowne.com/ser-29.html(陷阱3和4).