访问组合框和子窗体

Posted

技术标签:

【中文标题】访问组合框和子窗体【英文标题】:Access combo box and subform 【发布时间】:2019-11-13 16:54:57 【问题描述】:

我在一个带有组合框的表单上有一个子表单。我想从框中选择一个标准编号并让子表单仅显示这些记录。我在查询表达式中遇到了语法错误(缺少运算符)。有人可以帮忙吗?

Private Sub cbo_st_no_AfterUpdate()

    Dim standardNo As String

    standardNo = "Select * from StandardsList where ([st_no] = " & Me.cbo_st_no & ")"

    Me.WhoDoneItSubformy.Form.RecordSource = standardNo
    Me.WhoDoneItSubformy.Form.Requery

End Sub

【问题讨论】:

【参考方案1】:

Unhandled Exception 的答案很好,但是代码可以大大简化,无论是你的还是解决方案。这就是我会做的:

Private Sub cbo_st_no_AfterUpdate()
    Me.WhoDoneItSubformy.RecordSource = "SELECT * from StandardsList WHERE st_no=" & Nz(Me.cbo_st_no,0)
    Me.WhoDoneItSubformy.Requery
End Sub

如果零是st_no 的现有值,请使用-1 或任何其他保证不匹配现有记录的值。 如果您希望空值显示所有记录而不是无记录,请使用

Nz(Me.cbo_st_no,"st_no")

【讨论】:

【参考方案2】:

您收到的错误syntax error (missing operator) in query expression 指出Me.cbo_st_no 没有返回值。

如果尚未在组合框中选择任何条目,则可能会发生这种情况。

因此,如果组合框中尚未选择任何条目,您应该考虑是否应在子表单中显示所有记录或不显示任何记录。

这是一个完整的示例,假设 st_no 是一个数字字段:

Private Sub cbo_st_no_AfterUpdate()
    Dim standardNo As String

    If Len(Nz(Me.cbo_st_no)) = 0 Then
        'To show nothing:
        standardNo = "Select * From StandardsList Where False"
        'To show all:
        standardNo = "Select * From StandardsList"
    Else
        standardNo = "Select * From StandardsList Where [st_no] = " & Me.cbo_st_no
    End If

    Me.WhoDoneItSubformy.Form.RecordSource = standardNo
    Me.WhoDoneItSubformy.Form.Requery
End Sub

更多信息:

如果字段st_no 是文本字段,那么您必须将值包装在' 中:

"Select * From StandardsList Where [st_no] = '" & Me.cbo_st_no & "'"

【讨论】:

以上是关于访问组合框和子窗体的主要内容,如果未能解决你的问题,请参考以下文章

C# Winform主窗体和子窗体之间如何相互操作对方的控件

如何从位于访问中的另一个子窗体中的组合框中过滤子窗体?

关闭对话框和子窗体并将结果传递给主窗体

Access 2013 中 1:m 表的主窗体和子窗体

怎样在C#中实现父窗体向子窗体传值和子窗体向父窗体传值

MFC 主窗口如何在创建的子窗口前