#姓名?在 Access 2010 中重新查询后的表单上

Posted

技术标签:

【中文标题】#姓名?在 Access 2010 中重新查询后的表单上【英文标题】:#Name? on form after requery in Access 2010 【发布时间】:2014-01-31 17:22:06 【问题描述】:

我正在使用 VBA 和 SQL 根据在弹出表单上的多个控件中输入的条件重新查询我的主表单。据我所知,代码运行正常,根据我输入的条件重新查询数据库,但我的主窗体上的 2 个控件显示为 #Name?或根据条件重新查询后为空。有谁知道我该如何解决这个问题???

运行重新查询的代码是:

Public Sub SuperFilter()
On Error GoTo Err_AdvancedFilter_Click
Dim strSQL As String    
Dim strCallNumber As String
Dim strAsgnTech As String
Dim strClientID As String
Dim strCallGroup As String
Dim strPriority As String
Dim strOpenStatus As String

        If IsNull(Forms![frmTips&Tricks].txtCallNumber) = False Then
            strCallNumber = " (((CallInfo.CallNumber) = forms![frmTips&Tricks].[txtCallNumber])) and "
        Else
            strCallNumber = ""
        End If


        If IsNull(Forms![frmTips&Tricks].cboAsgnTech) = False Then
            strAsgnTech = " (((CallInfo.AsgnTech) = forms![frmTips&Tricks].[cboasgntech])) and "
        Else
            strAsgnTech = ""
        End If


        If IsNull(Forms![frmTips&Tricks].cboClientID) = False Then
            strClientID = " (((CallInfo.ClientID) = forms![frmTips&Tricks].[cboClientID])) and "
        Else
            strClientID = ""
        End If


        If IsNull(Forms![frmTips&Tricks].cboCallGroup) = False Then
            strCallGroup = " (((CallInfo.AsgnGroup) = forms![frmTips&Tricks].[cboCallGroup])) and "
        Else
            strCallGroup = ""
        End If


        If IsNull(Forms![frmTips&Tricks].cboPriority) = False Then
            strPriority = " (((CallInfo.Severity) = forms![frmTips&Tricks].[cboPriority])) and "
        Else
            strPriority = ""
        End If


        If Forms![frmTips&Tricks].optOpenStatus.Value = 1 Then
            strOpenStatus = " (((CallInfo.OpenStatus) = True))"
        Else
            strOpenStatus = " (((CallInfo.OpenStatus) is not null ))"
        End If

    strSQL = "SELECT CallInfo.CallNumber, CallInfo.ClientID,* " & _
            "FROM dbo_HDTechs INNER JOIN ([User] INNER JOIN CallInfo ON User.ClientID = CallInfo.ClientID) ON dbo_HDTechs.TechName = CallInfo.AsgnTech " & _
            "WHERE " & strCallNumber & strAsgnTech & strClientID & strCallGroup & strPriority & strOpenStatus & _
            "ORDER BY CallInfo.RcvdDate;"


    Form.RecordSource = strSQL
    Me.cboCallNumber.RowSource = strSQL
    Form.Requery

If Me.RecordsetClone.RecordCount = 0 Then

    MsgBox "No Records Found: Try Diferent Criteria."
    Form.RecordSource = "qryservicerequestentry"
    Me.cboCallNumber.RowSource = "qryservicerequestentry"
    Exit Sub
End If

Me.cmdSuperFilterOff.Visible = True



Exit Sub

Exit_cmdAdvancedFilter_Click:
    Exit Sub

Err_AdvancedFilter_Click:
    MsgBox Err.Description
    Resume Exit_cmdAdvancedFilter_Click



End Sub

第一个控件是一个组合框,它显示 CallInfo 表单(主表单)中的客户端名称。 控制源:ClientID 展开后会列出所有可用客户端,以从用户表单中选择(用户 ID 链接在用户表单和 CallInfo 表单之间)。 行源:SELECT User.ClientID FROM [User]; 重新查询后,这个组合框会是空白的,有时会显示#Name?如果你点击它。

第二个控件是一个显示客户电话号码的文本框。 控制来源:PhoneNo 重新查询后,此文本框始终显示#Name?

第三个控件是一个显示客户办公室位置的文本框。 控制来源:位置 真正让我困惑的是,这个文本框在重新查询后正确显示。我不知道为什么当电话号码文本框不显示时它会显示正确的数据,因为它们是如此相似并且使用相似的数据......

为了比较,表单记录源通常基于: SELECT CallInfo.CallNumber, CallInfo.ClientID, CallInfo.RcvdTech, CallInfo.RcvdDate, CallInfo.CloseDate, CallInfo.Clas-s-room, CallInfo.Problem, CallInfo.CurrentStatus, CallInfo.Resolution, CallInfo.Severity, CallInfo.OpenStatus, CallInfo.AsgnTech, dbo_HDTechs.Email, CallInfo.FullName, CallInfo.AsgnGroup, User.Location, User.PhoneNo, CallInfo.OpenStatus FROM dbo_HDTechs INNER JOIN ([User] INNER JOIN CallInfo ON User.ClientID = CallInfo.ClientID) ON dbo_HDTechs.TechName = CallInfo.AsgnTech WHERE (((CallInfo.OpenStatus)=True)) ORDER BY CallInfo.RcvdDate;

【问题讨论】:

通过在控件源中指定表单解决,如:CallInfo.ClientID 我仍然不知道为什么客户端显示正确...有人有提示吗? :) TE 【参考方案1】:

继续你写的,我可能会采取稍微不同的方法(只是个人喜好)。

    我会更改您的所有“IsNull”测试以检查“空”。 IE。 如果 IsNull(Forms![frmTips&Tricks].cboClientID) = False AND ...cliientID "" 就在今天,我在查询 WHERE 子句中遇到了与表单引用有关的问题,所以我改为: strClientID = " (((CallInfo.ClientID) = '" & forms![frmTips&Tricks].[cboClientID] & "')) 和" 添加生成的 SQL 的 Debug.Print,然后查看它并尝试手动运行该 SQL 祝你好运, 韦恩

【讨论】:

感谢韦恩的输入,我会调查的。我以前没有使用过 debug.print 。我将不得不做一些研究:) 就在您的代码行之前: Form.RecordSource = strSQL 添加以下行: Debug.Print strSQL 如果您在该行上放置一个断点: Form.RecordSource = strSQL 那么您将看到您的完整的 SQL 语句在底部的“立即”窗口中。只需复制 SQL 行,在恢复代码后,您可以手动运行该查询。【参考方案2】:

通过在控件源中指定表单解决,如:CallInfo.ClientID

我仍然不知道为什么客户办公室显示正确...有人有提示吗? :)

TE

【讨论】:

以上是关于#姓名?在 Access 2010 中重新查询后的表单上的主要内容,如果未能解决你的问题,请参考以下文章

access怎么能批量多个查询表啊?

在 MS Access 中管理和调试 SQL 查询

access数据库中如何多表查询

如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?

Access 2010 查询计数加倍

检查 Access 2010 导航子窗体是不是打开