Listbox.Listcount不准确

时间:2013-09-17 17:57:54

标签: vba ms-access listbox access-vba ms-access-2010

搜索此网站和其他网站但无法找到答案,说明在从记录集添加项目时,为什么我没有看到列表框的正确列表计数。 由于列表框中的列标题或65,534物理限制,大多数其他线程都会关注计数关闭。 我看到了一些不同的东西

使用链接的SQL Server 2008表运行Access 2010。

代码:

lstSearchResults.RowSource = ""
lstSearchResults.AddItem ("Material Number;Description")
Set rsParts = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)

If rsParts.RecordCount > 0 Then
    rsParts.MoveLast
    rsParts.MoveFirst
    lngCount = 0
    Do While Not rsParts.EOF
        lngCount = lngCount + 1
        lstSearchResults.AddItem (rsParts.Fields("MaterialNumber") & ";" & rsParts.Fields("Description"))
        rsParts.MoveNext
    Loop
End If

在循环之后放置一个断点我检查了以下值:

lstSearchResults.ListCount - 1012
rsParts.RecordCount - 5255
lngCount - 5255

1 个答案:

答案 0 :(得分:2)

由于您使用的是AddItem方法,这意味着您的列表框的行源类型属性必须是“值列表”。这意味着Record Source属性是一个包含该值列表的字符串。并且可以包含在值列表中的字符数有限制。虽然我不记得该限制的数量,但我怀疑这是你的价值表没有包含你期望的所有价值的原因。

但是有一种更简单的方法来加载列表框值。您有一个查询 strSQL ,为其打开一个记录集,然后遍历记录集,将每行中的2个字段值添加到值列表中。

直接使用SQL语句...不将记录集作为中介。

  1. 将列表框的行源类型更改为“表/查询”。
  2. 使用SQL语句作为列表框的行源属性。
  3. 这种方法不那么大惊小怪,并且避免了值列表字符限制。然后,您只需要确定1K或更多行是否真的适合列表框。 : - )