首页 文章

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

提问于
浏览
2

我正在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]);

1 回答

  • 1

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

    OR [QUOTE_DATESTART] Between [Forms]![frm_QuotesReports]![txtFromDate] 
        And [Forms]![frm_QuotesReports]![txtToDate] 
    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])

相关问题