2

搜索了这个站点和其他站点,但找不到关于为什么在从记录集中添加项目时我没有看到列表框的正确列表计数的答案。由于列表框上的列标题或 65,534 个物理限制,大多数其他线程要么关注计数减少 1。我看到了一些不同的东西

使用链接的 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
4

1 回答 1

2

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

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

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

  1. 将列表框的行源类型更改为“表/查询”。
  2. 使用 SQL 语句作为列表框的 Row Source 属性。

这种方法不那么大惊小怪,并且避免了值列表字符限制。然后您只需要确定 1K 或更多行是否真的适合列表框。:-)

于 2013-09-17T18:52:43.160 回答