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

时间:2017-12-14 14:20:23

标签: sql ms-access

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

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

  1. 用户可以单击日期选择器并选择要传递给查询的日期范围;
  2. 用户可以从组合框中选择会计年度
  3. 我创建了一个单独的表,其设置如下:

    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 个答案:

答案 0 :(得分:1)

我相信我已经解决了。我按如下方式编辑了最后一行:

(64,1)