#名称?在Access 2010中重新查询后的窗体上

时间:2014-01-31 17:22:06

标签: sql vba access-vba ms-access-2010

我正在使用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在“用户”表单和“呼叫信息”表单之间链接)。 行源:SELECT User.ClientID FROM [User]; 重新查询后,这个组合框将是空白的,有时显示#Name?如果你点击它。

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

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

要比较,表单记录源通常基于: SELECT CallInfo.CallNumber, CallInfo.ClientID, CallInfo.RcvdTech, CallInfo.RcvdDate, CallInfo.CloseDate, CallInfo.Classroom, 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;

2 个答案:

答案 0 :(得分:0)

继续你所写的内容,我可能采取略微不同的方法(只是个人偏好)。

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

答案 1 :(得分:0)

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

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

TE