访问:从表单传递参数到查询
Posted
技术标签:
【中文标题】访问:从表单传递参数到查询【英文标题】:Access: Passing Parameters from Form to Query 【发布时间】:2017-12-14 14:20:23 【问题描述】:我正在 Access 2013 中编写查询。查询将使用表单中的参数,将这些参数传递给查询,然后显示结果。我几乎让它工作了。此表单的问题是有多个日期字段。有两个文本字段(txtFromDate 和 txtToDate)。
这个想法是用户可以通过以下两种方式之一输入日期范围:
-
用户可以单击日期选择器并选择一个日期范围以传递给查询;
用户可以从组合框中选择会计年度。
我创建了一个单独的表,设置如下:
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])
【讨论】:
以上是关于访问:从表单传递参数到查询的主要内容,如果未能解决你的问题,请参考以下文章
将数据从 Access 中的表单传递到 Word 中的邮件合并