【问题标题】:Using filter on sub form在子表单上使用过滤器
【发布时间】:2015-09-17 00:03:26
【问题描述】:

我正在尝试在子表单上使用过滤器。 我在主窗体上有一个组合框。

如果在组合框中选择了名称并点击搜索按钮,我希望相应的数据显示在子表单中。

如果我将组合框的行源设置为SELECT [table].[name] FROM table,则这些值不会显示在组合框中,但我可以使用以下代码在子表单中获得所需的数据。

Private Sub SearchName_Click()
    If IsNull(Me.ComboName.Value) Then
        Me.SubList.Visible = False
        MsgBox "Please select name。", vbOKOnly + vbCritical
    Else
         Me.SubList.Visible = True
         Call frm_Enter

    End If End Sub

Private Sub frm_Enter()
Dim CustName As String
CustName = Me.ComboName.Value
With Me.SubList.Form
    .Filter = "[name]='" & CustName & "'" 
    .FilterOn = True
End With
End Sub

如果我将组合框的行源更改为SELECT [table].[Id], [table].[name] FROM table,组合框中的值会显示,但我在子表单中没有得到想要的结果。

我尝试将过滤器更改为.Filter = "[Id]='" & CustName & "'",但结果没有任何变化。 非常感谢任何建议。

【问题讨论】:

  • 尝试选择除 id 之外的任何其他列,问题仍然存在?
  • 您是否尝试过运行另一个查询来获取名称?像Select name From table Where Id = CustName 这样的东西,因为你在CustName 中的值是Id。
  • 最简单的技巧是将组合框的行源更改为:SELECT [table].[name], [table].[name] FROM table - 是的同一列两次。组合框似乎被配置为使用第一列作为comboname.value,第二列作为显示的内容。另一种方法是查看组合框的属性,可能有一个列宽属性将第一列设置为 0,因此它不会显示。它可能看起来像“0;2.5”或“0,2.5”或“,2.5”或类似的东西。
  • 更改为SELECT [table].[name], [table].[name] FROM table 并且成功了!!!谢谢!!

标签: ms-access combobox vba box


【解决方案1】:

好的,你的组合框定义了两列,所以你的查询:

SELECT ID, [Name] FROM table is fine

但要使用该语法,您需要参考组合框的第二列(从零开始)。

.Filter = "[name]='" & me.comboname.column(1) & "'" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多