【问题标题】:MS ACCESS Counting Records from table based on multiple criteriaMS ACCESS 根据多个条件从表中计数记录
【发布时间】:2016-07-07 20:45:45
【问题描述】:

我希望 Access 中的文本框根据在组合框中选择的经理在表中找到经理有“过期”记录的记录数进行更新,我有以下代码,但出现错误:

Private Sub Combo26_AfterUpdate()

Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset("SELECT Advisor FROM tbltargets WHERE manager = '" & Me.Combo26.Column(0) & "' AND overdue = 'Overdue'")
If rs.EOF Then
Me.Text35 = 0
MsgBox "no overdue records", vbOKOnly
Else
rs.MoveLast
Me.Text35 = rs.RecordCount
rs.Close
End If

End Sub

当我从组合框中选择一个选项时,它会给我一个错误“参数太少。预期为 1”...

我有类似的代码,所以我不确定为什么上面会导致错误,有人可以帮忙吗?

谢谢你,

【问题讨论】:

  • 什么是 Me.Combo26.Column(0) 错误? DCOUNT 将是更少的代码或select count(advisor) as CT from tblTargets where manager='xyz' and overdue='overdue'
  • 感谢帮助。combo 26 错误发生时设置为表中经理的名字。

标签: sql vba ms-access


【解决方案1】:

这样检查

Private Sub Combo26_AfterUpdate()

Dim rs As DAO.Recordset


If IsNull(Combo26.value) Then Exit Sub

Set rs = CurrentDb.OpenRecordset("SELECT COUNT(*) AS CNT FROM tbltargets WHERE manager = '" & Combo26.value & "' AND overdue = 'Overdue'")

If Not rs.BOF Then

    If Nz(rs!CNT, 0) = 0 Then
        Me.Text35 = 0
        MsgBox "no overdue records", vbOKOnly
    Else
        Me.Text35 = rs!CNT
    End If
End If

End Sub
  1. 使用combobox.value 而不是combobox.column
  2. 将 SQL 更改为 COUNT(*) 并相应地调整代码以提高性能。
  3. 添加了一些针对 NULL 值的保护(您确实应该在此子中添加错误处理程序)

【讨论】:

  • 谢谢 Thomas,我刚刚试了一下,但遇到了同样的“参数太少,预期为 1”错误。
  • Set rs = CurrentDb.OpenRecordset("SELECT COUNT(*) AS CNT FROM tbltargets WHERE manager = '" & Combo26.Value & "' AND overdue = 'Overdue'")
  • Thomas 抱歉,我发现了这个问题,我完全没用。我指的是错误的表。很抱歉浪费了任何人的时间,但您上面的代码无论如何都会有所帮助,并且还会考虑添加错误处理程序。再次感谢
  • 没问题,即使是最好的也会发生这种情况......但是他们并没有要求这样:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多