访问ComboBox达到的最大记录数

时间:2017-08-30 18:06:14

标签: database vba ms-access access-vba odbc

我在MySQL中有一个表通过Microsoft Access 2013中的链接表(通过ODBC)访问。

此表包含超过124,000条记录,我需要一个表单中的ComboBox才能搜索UPC列。

这是查询,它是ComboBox的当前数据源:

SELECT [ID], [UPC_Case], [Description] FROM itemlist ORDER BY [UPC_Case];

除了ComboBox下的表视图不会超过记录号62287(但是自动填充仍然适用于表无法看到的记录)之外,这种方法很有效,是否有办法使其能够查看所有记录?

2 个答案:

答案 0 :(得分:0)

这是一个已知的错误,有时像这样的大型记录集存在问题。你在基于文本的字段上排序吗?如果是这样,请尝试删除排序,看看它是否解决了问题。

答案 1 :(得分:0)

Access ComboBoxes的最大记录数为65535。

为了避免这种情况,我发现an article给了我编写一个函数所需的基础,该函数在键入一定数量的字符后动态设置rowSource。

这是设置rowSource的函数。我重构了代码,以便它可以在任何具有任何查询的Form中的任何comboBox上使用。

Dim inputStub As String

Function ComboLimiter(targetCombo As ComboBox, minChars As Integer, Query As String, searchField As String)
    Dim inputStr As String: inputStr = targetCombo.Text 'Set input string
    Dim newStub As String: newStub = Nz(Left(inputStr, minChars), "") 'Set first n characters of targetCombo.Text

    If newStub <> inputStub Then 'If first n chars are the same as previously, do nothing.
        If Len(newStub) < minChars Then
            'Remove the RowSource
            targetCombo.RowSource = Query & " WHERE (False);"
            inputStub = ""
        Else
            'New RowSource
            targetCombo.RowSource = Query & " WHERE (" & searchField & " Like """ & newStub & "*"") ORDER BY " & searchField & ";"
            inputStub = newStub
        End If
    End If
End Function

该函数可以绑定到ComboBox更改事件,如下所示:

Private Sub UPCCombo_Change()
    Call ComboLimiter(Me.UPCCombo, 1, _
    "SELECT ID, UPC_Case, Description FROM itemlist", "UPC_Case")
End Sub