#姓名?在 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 中重新查询后的表单上的主要内容,如果未能解决你的问题,请参考以下文章