繁体   English   中英

Microsoft Access 2013条件参数查询

[英]Microsoft Access 2013 Conditional Parameter Query

我有一个使用两个参数来搜索/过滤可用案例的表格。 有三个控件:txtCaseFiler,cboClients和lstCases。

cboClients仅显示当前分配给案例的客户的列表

lstCases显示案件的可过滤列表

在txtCaseFilter中,我具有用于onChange事件的VBA以重新查询lstCases和lstCases的行源中的以下条件,在cboClients上,我具有针对AfterUpdate事件的VBA。

喜欢“ &[FORMS]![frmCaseSearch]![txtCaseFilter]。[文本]&”

这部分工作正常。

考虑到某人可能要搜索尚未分配客户的案例,因此希望以一种不会生成cboClient的方式来忽略lstCases的方式构建查询,而仅过滤出cboClient的案例。选择一个客户。

我试了一下:Nz([Forms]![frmCaseSearch]![cboClients],[ClientID]),如果我仅查找分配了客户的案例,但在没有客户的情况下无法解决,则可以正常工作。

这是到目前为止的SQL。

SELECT tblCases.CaseNumber, tblCasesClients.ClientID
FROM tblCases LEFT JOIN tblCasesClients ON (tblCases.AgencyID = tblCasesClients.AgencyID) AND (tblCases.CaseNumber = tblCasesClients.CaseNumber)
WHERE (((tblCases.CaseNumber) Like "*" & [FORMS]![frmCaseSearch]![txtCaseFilter].[Text] & "*") AND ((tblCasesClients.ClientID)=Nz([Forms]![frmCaseSearch]![cboClients],[ClientID])))
ORDER BY tblCases.CaseNumber;

如何编写此查询,以便在查询为空的情况下忽略cboClients,在不查询的情况下使用它? 我考虑的唯一其他选择是编写一个VBA函数以返回“行源”字符串,但这似乎有点过头了。

考虑使用VBA动态构建查询:

strSQL = "SELECT tblCases.CaseNumber, tblCasesClients.ClientID" 
strSQL = strSQL & " FROM tblCases"
strSQL = strSQL & " LEFT JOIN tblCasesClients ON (tblCases.AgencyID = tblCasesClients.AgencyID)"
strSQL = strSQL & " AND (tblCases.CaseNumber = tblCasesClients.CaseNumber)"
strSQL = strSQL & " WHERE (((tblCases.CaseNumber) Like '*" & [Forms]![frmCaseSearch]![txtCaseFilter] & "*')" 

If Not IsNull([Forms]![frmCaseSearch]![cboClients]) Then
    strSQL = strSQL & " AND ((tblCasesClients.ClientID)=([Forms]![frmCaseSearch]![cboClients])))"
Else 
    strSQL = strSQL & ")"
End If

strSQL = strSQL & " ORDER BY tblCases.CaseNumber;"

Forms!frmCaseSearch!lstCases.RowSource = strSQL

这对您有用吗?

SELECT tblCases.CaseNumber, 
    tblCasesClients.ClientID
FROM tblCases 
LEFT JOIN tblCasesClients 
ON (tblCases.AgencyID = tblCasesClients.AgencyID) 
    AND (tblCases.CaseNumber = tblCasesClients.CaseNumber)
WHERE 
    tblCases.CaseNumber Like "*" & [FORMS]![frmCaseSearch]![txtCaseFilter].[Text] & "*"
    AND (tblCasesClients.ClientID = [Forms]![frmCaseSearch]![cboClients])
        or nz([Forms]![frmCaseSearch]![cboClients].[Text],"")="")
ORDER BY tblCases.CaseNumber;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM