访问:从表单传递参数到查询

Posted

技术标签:

【中文标题】访问:从表单传递参数到查询【英文标题】:Access: Passing Parameters from Form to Query 【发布时间】:2017-12-14 14:20:23 【问题描述】:

我正在 Access 2013 中编写查询。查询将使用表单中的参数,将这些参数传递给查询,然后显示结果。我几乎让它工作了。此表单的问题是有多个日期字段。有两个文本字段(txtFromDatetxtToDate)。

这个想法是用户可以通过以下两种方式之一输入日期范围:

    用户可以单击日期选择器并选择一个日期范围以传递给查询; 用户可以从组合框中选择会计年度

我创建了一个单独的表,设置如下:

Table:    tbl_FiscalYear
Columns:  FiscalYr_ID, FiscalYearName, FromDate, ToDate

在我的查询中,如果用户在 txt 字段中输入手动日期,结果会很好(传递给查询的所有参数)。但是,如果他们绕过手动日期输入并使用 会计年度 组合框,则查询结果将忽略所有先前的参数,并且结果仅反映每个 会计年度 的适当日期范围会计年度表中的日期设置。

我认为罪魁祸首是最后的 OR 声明。有没有办法将两个日期搜索参数合并到表单中,并允许使用一个或另一个?我的代码是否不正确,因为它不允许从文本日期字段传递空值?

SELECT tbl_QUOTE.QUOTE_ID, 
       tbl_QUOTE.QUOTE_DATESTART, 
       tbl_QUOTE.QUOTE_DATEEND, 
       tbl_QUOTE.QUOTE_lookup_POC_ID, 
       tbl_QUOTE.QUOTE_lookup_LOC_ID, 
       tbl_QUOTE.QUOTE_lookup_TRAINER_NAME, 
       tbl_QUOTE.QUOTE_lookup_STATUS_ID, 
       tbl_QUOTE.QUOTE_lookup_TRAINER_ID, 
       tbl_QUOTE.QUOTE_lookup_MODS_ID, 
       tbl_POC.POC_AGENCY_lookup, 
       tbl_QUOTE.QUOTE_FINANCIAL_CD, 
       tbl_FISCALYEAR.FISCALYEARNAME
FROM tbl_fiscalyear, tbl_QUOTE 
INNER JOIN tbl_POC ON tbl_QUOTE.QUOTE_lookup_POC_ID = tbl_POC.POC_ID
WHERE Nz([QUOTE_lookup_STATUS_ID],"") Like [Forms]![frm_QuoteReport]![cboStatusLookup] & "*"
AND Nz([tbl_POC].[POC_AGENCY_lookup],"") Like [Forms]![frm_QuoteReport]![cboAgency] & "*"
AND Nz([QUOTE_lookup_POC_ID],"") Like [Forms]![frm_QuoteReport]![cboPOC] & "*"
AND Nz([QUOTE_lookup_MODS_ID],"") Like [Forms]![frm_QuoteReport]![cboCourse] & "*"
AND Nz([QUOTE_lookup_LOC_ID],"") Like [Forms]![frm_QuoteReport]![cboLocation] & "*"
AND Nz([QUOTE_lookup_Trainer_ID],"") Like [Forms]![frm_QuoteReport]![cboTrainer] & "*"
AND Nz([Fiscalyr_ID],"") Like [Forms]![frm_QuoteReport]![cboFY] & "*"
AND Nz([Quote_Financial_Cd],"") Like [Forms]![frm_QuoteReport]![chkFundCd] & "*"
AND [QUOTE_DATESTART] Between [Forms]![frm_QuoteReport]![txtFromDate] 
                          And [Forms]![frm_QuoteReport]![txtToDate]
OR [QUOTE_DATESTART] 
BETWEEN (SELECT [tbl_fiscalyear].[fromdate] 
         FROM tbl_fiscalyear 
         WHERE fiscalyr_ID = [Forms]![frm_QuoteReport]![cboFY]) 
    AND (SELECT [tbl_fiscalyear].[todate] 
         FROM tbl_fiscalyear 
         WHERE fiscalyr_ID = [Forms]![frm_QuoteReport]![cboFY]);

【问题讨论】:

编辑:我完全删除了日期文本字段,并且使用组合框参数可以正常传递。所以我假设我处理日期文本字段的方式有问题,但我不确定它是什么。 我相信我已经解决了。我将最后几行编辑如下: OR [QUOTE_DATESTART] 在 [Forms]![frm_QuotesReports]![txtFromDate] And [Forms]![frm_QuotesReports]![txtToDate] AND [QUOTE_DATESTART] BETWEEN (SELECT [tbl_fiscalyear].[fromdate] 之间FROM tbl_fiscalyear WHERE accountingyr_ID = [Forms]![frm_QuotesReports]![cboFY]) AND (SELECT [tbl_fiscalyear].[todate] FROM tbl_fiscalyear WHERE accountingyr_ID = [Forms]![frm_QuotesReports]![cboFY]) 这个查询是如何使用的?作为表单的记录源或只是打开到屏幕的已保存查询? 【参考方案1】:

我相信我已经解决了。我将最后几行编辑如下:

   OR [QUOTE_DATESTART] Between [Forms]![frm_QuotesReports]![txtFromDate] 
    And [Forms]![frm_QuotesReports]![txtToDate] <br/> AND [QUOTE_DATESTART] 
    BETWEEN (SELECT [tbl_fiscalyear].[fromdate] FROM tbl_fiscalyear WHERE 
    fiscalyr_ID = [Forms]![frm_QuotesReports]![cboFY]) AND (SELECT 
    [tbl_fiscalyear].[todate] FROM tbl_fiscalyear WHERE fiscalyr_ID = [Forms]!
    [frm_QuotesReports]![cboFY])

【讨论】:

以上是关于访问:从表单传递参数到查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 vba 在访问查询中传递参数值

将数据从 Access 中的表单传递到 Word 中的邮件合并

如何从Spring表单传递参数到@RequestParam?

访问报表传递参数到子报表查询

如何将参数从脚本传递到 html 表单值

.NET 关于一般处理程序获取表单传递的参数的问题