【问题标题】:How to display all values in a combobox by recordset (Access 2010)如何按记录集显示组合框中的所有值 (Access 2010)
【发布时间】:2017-08-24 08:47:44
【问题描述】:

我的问题是 access 2010 中的组合框仅显示 1278 的 1249 个值。是否有可能增加 access 中组合框的最大值数?

这是一个代码示例:

If not rs.EOF Then
    rs.MoveFirst
    frm.FName.RowSource = ""
    frm.FNameLux.RowSource = ""

    Do Until rs.EOF
        If rs![id] <> -1 And rs![id] <> -2 Then
            If (rs!KID <> 2 And rs!KID <> 8) Then
                If IsNull(rs![Name]) = False Then
                    frm.FName.AddItem rs![Name] & ";" & rs![id]
                    Debug.Print rs!Name 'The program writes all values in the combobox, but when I look in the form, I don't see all values
                End If
            End If

            If (rs!KID = 2 Or rs!KID = 8) Then
                If IsNull(rs![Name]) = False Then
                    frm.FNameLux.AddItem rs![Name] & ";" & rs![id]
                End If
            End If
        End If
        rs.MoveNext
        i = i + 1
    Loop
End If

rs 是记录集。有什么想法如何解决它或我必须做什么?

【问题讨论】:

  • 组合框是在第一个 1249 项之后停止,还是随机项丢失?
  • @Andre 在debug.print 中查看所有值而不在相应项之后停止。
  • @Andre 所以,我发现当我用 2 列定义组合框时会出现问题。但我没有找到解决办法。 ColumnCount 设置为 2 个 ColumnWidths = 15cm;0cmBoundColumn=2Row Source Type = value list
  • 对不起,我的意思是BoundColumn=1

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


【解决方案1】:

显然,RowSourceType = Value listRowSource 属性限制为 16 位整数长度 (2^15 = 32768) 或更低。

2 列组合框的测试代码:

Private Sub btValues_Click()

    Dim i As Long

    DoCmd.Hourglass True

    Me.cboValues.RowSource = ""
    For i = 1 To 5000
        Me.cboValues.AddItem "Number " & Format(i, "0000") & ";" & i
    Next i

    DoCmd.Hourglass False

    Debug.Print Len(Me.cboValues.RowSource)

End Sub

组合框被填满直到“Number 1991”,输出为32739

所以问题不是行数,而是字符串的总长度。如果我缩短文本,它会上升到“Nr 2604”(32744 个字符)。

您必须使用RowSourceType = Table/query 来显示所有项目。

编辑

创建查询作为组合框的行源。据我所知,您的代码中没有任何内容不能在 WHERE 子句中完成。

例如为FName

SELECT Name, id
FROM yourTable
WHERE id <> -1 AND id <> -2
  AND KID <> 2 AND KID <> 8
  AND Name IS NOT NULL

如果无法在 SQL 中重新创建 VBA 代码,则必须将所需的记录集行插入到临时表中,并将此表用作行源。

【讨论】:

  • 感谢您的回答。如何在“表/查询”类型中定义我的存储过程?
  • 你能给我做一个代码示例吗?我尝试将 SELECT 语句写入.RowSource,但组合框仍然为空。
  • 我建议使用此 SQL 进行实际保存的查询。测试此查询,然后将其名称用作行源。如果不行,请添加组合框属性表(tab Data)的截图。
猜你喜欢
  • 1970-01-01
  • 2014-10-07
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
相关资源
最近更新 更多