Ms access 从155K记录表中仅获取组合框中列出的65K记录
我有一张155K的记录表。我只能在具有recordsource和query或sql的表单的组合框中滚动65K条记录,从该表中选择三个字段。为什么它没有列出所有155K记录?即使是我用作记录源的查询,也会显示表单之外的所有记录。也许项索引是一个16位整数Ms access 从155K记录表中仅获取组合框中列出的65K记录,ms-access,Ms Access,我有一张155K的记录表。我只能在具有recordsource和query或sql的表单的组合框中滚动65K条记录,从该表中选择三个字段。为什么它没有列出所有155K记录?即使是我用作记录源的查询,也会显示表单之外的所有记录。也许项索引是一个16位整数 更好的问题是,您真的希望用户在组合框中滚动浏览155000个项目吗?也许项目索引是一个16位整数 一个更好的问题是,你真的希望用户在一个组合框中滚动15.5万个项目吗?另一个人认为这是一种让用户访问此数据的疯狂方式。没有人会想一次解析超过100k
更好的问题是,您真的希望用户在组合框中滚动浏览155000个项目吗?也许项目索引是一个16位整数
一个更好的问题是,你真的希望用户在一个组合框中滚动15.5万个项目吗?另一个人认为这是一种让用户访问此数据的疯狂方式。没有人会想一次解析超过100k条记录。我会提供一种预先筛选记录的方法,以便只显示当时感兴趣的记录。另一个人同意,这将是一种让用户访问此数据的疯狂方式。没有人会想一次解析超过100k条记录。我会提供一种预先筛选记录的方法,以便只显示当时感兴趣的记录。65536确实是组合框项目数量的限制 我建议使用带有搜索按钮的文本框从列表中查找某人,而不是在这种情况下使用组合框 作为替代方案,您可以从插入的文本中动态加载相关项 您还可以尝试通过表单上先前输入的值对组合框进行“预过滤”,以使返回的记录数低于允许的最大值。例如,如果您的表有价值100000的名称和地址,您可以让用户(在使用combobox之前)输入一个zipcode或状态,用于过滤combobox查询RecordSource返回的记录数
@史蒂文A.洛和阿姆德凡:你知道A是什么,为什么叫组合框吗?它是一个文本框和一个列表框的组合。键入文本后,列表框将显示与文本匹配的第一个条目
所以,我想这是一个合理的问题。65536确实是组合框项目数量的限制 我建议使用带有搜索按钮的文本框从列表中查找某人,而不是在这种情况下使用组合框 作为替代方案,您可以从插入的文本中动态加载相关项 您还可以尝试通过表单上先前输入的值对组合框进行“预过滤”,以使返回的记录数低于允许的最大值。例如,如果您的表有价值100000的名称和地址,您可以让用户(在使用combobox之前)输入一个zipcode或状态,用于过滤combobox查询RecordSource返回的记录数
@史蒂文A.洛和阿姆德凡:你知道A是什么,为什么叫组合框吗?它是一个文本框和一个列表框的组合。键入文本后,列表框将显示与文本匹配的第一个条目
所以,我想这是一个合理的问题。那么你真正想要的是一个“自动完成”的功能,就像在互联网浏览器中看到的那样?当你说组合框时,每个人都会画出一个下拉列表,用户在其中选择一个项目-你可能想澄清你的问题。那么你真正想要的是一个“自动完成”的功能,就像在internet浏览器中看到的那样?当你说组合框时,每个人都会画出一个下拉列表,用户在其中选择一个项目-你可能想澄清你的问题。一般来说,当你遇到一个通用和广泛使用的组件(如组合框)的硬编码限制时,是时候重新考虑你的方法了。组合框不是为您的用例设计的,也不足以满足您的用例。从项目中后退几步,重新评估UI。也许ListView或过滤数据网格更合适 一般来说,当您在一个通用且广泛使用的组件(如组合框)上遇到硬编码限制时,是时候重新考虑您的方法了。组合框不是为您的用例设计的,也不足以满足您的用例。从项目中后退几步,重新评估UI。也许ListView或过滤数据网格更合适 创建文本框和列表框组合并不太困难,在文本框的更改事件中重新查询列表框,逐步缩小所选项目的范围。这意味着您的用户仍然可以看到一个名称列表,而不是猜测,而是一个更短、更相关的列表 以下是此类列表框的行源的示例SQL:
SELECT tp.PersonKey,
tp.Surname & ", " & tp.Forename AS PersonName
FROM tblPersons tp
WHERE tp.Surname
LIKE Forms!MyForm!txtSurname.Text
ORDER BY tp.Surname, tp.Forename
注意使用textbox的Text属性,这可以确保使用textbox的当前内容,但这也意味着除非TXTNUSAME具有焦点,否则无法重新查询textbox,这很好,由于重新查询只应在txtAn姓氏的更改事件中进行。创建文本框和列表框组合并不太困难,其中列表框在文本框的更改事件中重新查询,从而逐步缩小所选项目的范围。这意味着您的用户仍然可以看到一个名称列表,而不是猜测,而是一个更短、更相关的列表 以下是此类列表框的行源的示例SQL:
SELECT tp.PersonKey,
tp.Surname & ", " & tp.Forename AS PersonName
FROM tblPersons tp
WHERE tp.Surname
LIKE Forms!MyForm!txtSurname.Text
ORDER BY tp.Surname, tp.Forename
注意使用textbox的Text属性,这可以确保使用textbox的当前内容,但这也意味着除非TXTNUSAME具有焦点,否则无法重新查询textbox,这很好,因为重新查询只能在TXTNUSAME的更改事件中进行。在现实世界中很难使用,combobox存储155k条记录,我认为如果将其更改为[…]浏览按钮或其他控件,我将更易于使用
PARAMETERS [Forms]![MyForm]![MyField] Text ( 255 );
SELECT MyID, MyField FROM MyTable WHERE MyField = [Forms]![MyForm]![MyField];"
Dim strRowSource As String
strRowSource = "PARAMETERS [Forms]![MyForm]![MyField] Long; "
strRowSource = strRowSource & "SELECT MyID, MyField FROM MyTable "
strRowSource = strRowSource & "WHERE MyField = [Forms]![MyForm]![MyID]"
strRowSource = strRowSource & "UNION SELECT MyID, MyField FROM MyTable"
If Len(Me!cmbMyCombo.Text)=3 Then
strRowSource = strRowSource & " WHERE MyField Like '"
strRowSource = strRowSource & Me!cmbMyCombo.Text
strRowSource = strRowSource & "*'"
Me!cmbMyCombo.RowSource = strRowSource
Me!cmbMyCombo.DropDown
End If
Dim strRowSource As String
strRowSource = "PARAMETERS [Forms]![MyForm]![MyField] Text ( 255 ); "
strRowSource = strRowSource & "SELECT MyID, MyField FROM MyTable "
strRowSource = strRowSource & "WHERE MyField = [Forms]![MyForm]![MyField]"
Me!cmbMyCombo.RowSource = strRowSource
Private Sub POLICY_NO_Click()
Set Me.Parent.Recordset = CurrentDb.OpenRecordset("qryHPolicy")
Me.Parent.Recordset.FindFirst "[POLICY_NO]=" & Me.POLICY_NO & ""
End Sub
Forms(Me_FormTo).Form.RecordSource = Me_RecSource
Forms(Me_FormTo).Combo6.Form.RecordSource = Me_RecSource