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)
任何有关这方面的帮助将非常感激.
您正在使用记录集而没有正确初始化,因此您的调用rs.RecordCount不会返回正确的值.
您需要通过检查空记录集 If rs.EOF and rs.BOF Then.要获得正确的记录计数,您需要致电rs.MoveLast.之前,记录计数不可靠.
有关更多信息,请参见http://allenbrowne.com/ser-29.html(陷阱3和4).
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |