使用 Criteria 的查询未返回准确或相关的结果

Query with Criteria is not returning accurate or relevant results

我在 table 中有一个包含 9 条记录的数据集,这是测试数据。 我有以下数据样本。 在下面的 table 中,第一行是 header.

+-------------+-------------+----------+---------------+---------------+
| BehrInvoice |  TboInvoice |  TboRloc |     TboDoc    |     TboPax    |
+-------------+-------------+----------+---------------+---------------+
|        4312 |  1449S      |  WIUBLF  |  -0772089627  |  ASARCH/CHAD  |
|        4313 |  1457S      |  TAQXKU  |  XD7366998723 |  CARREON JR/L |
|        4314 |  1457S      |  TAXXKU  |  -7366998723  |  CARREON JR/L |
|        4317 |  1461S      |  TOXSEH  |  XD7366998726 |  ALVA/MICHAEL |
|        4318 |  1460S      |  TOXSEH  |  -7366998726  |  ALVA/MICHAEL |
|        4320 |  1458S      |  ULHHZO  |  -7366998724  |  GREENFIELD/M |
+-------------+-------------+----------+---------------+---------------+

我想做的是能够搜索每一列, 一起。

我希望如果我输入 alva 我会看到 Alva/Michael 记录弹出,至少首先出现。

或者,如果我在 TboInvoice 搜索框 1458 中输入 alva TboPax 搜索框,我会看到所有这三个记录。

我正在尝试使用这个:

SELECT *
FROM Main
WHERE ((Main.TboInvo) LIKE [Forms]![SearchForm]![TboInvoice] & "*")
OR ((Main.TboPax) LIKE [Forms]![SearchForm]![PaxName] & "*")

但是结果集全部返回。 我隔离到 TboInvoice,并尝试了这个:

WHERE ((Main.TboInvo) = [Forms]![SearchForm]![TboInvoice] & "[S]")

它什么也没带回来。

我想我应该只关注这里的 TboInvoice,并正确地获取 运行。

所以,综上所述,问题是:

如何在此处查询 TboInvoice 列并获得更准确的结果?

=== 编辑 190906

所以当我输入:

SELECT * FROM Main​ 
WHERE​ Main.TboPax LIKE "alva*"​;

它工作得很好。 当我输入:

SELECT *
FROM Main
WHERE (((Main.TboPax) Like [Forms]![SearchForm]![PaxName]));

AND [PaxName]== "alva" 形式的值,我什么也没得到。也许我引用的表格不正确?

您的第一个查询 returns 一切的原因是因为如果文本框 TboInvoicePaxName 中的任何一个为空,那么 [Forms]![SearchForm]![TboInvoice] & "*" 将产生 "*", 从而匹配所有记录.

考虑到这一点,您将需要在选择标准中包含一个测试,以说明表单控件何时为空,可能类似于:

select * from main
where
(
    [Forms]![SearchForm]![TboInvoice] is not null and 
    main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) or
(
    [Forms]![SearchForm]![PaxName] is not null and 
    main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
)

根据所需的行为,如果 both 表单控件为空,您可能希望返回 all 记录,这需要第三个条件如:

select * from main
where
(
    [Forms]![SearchForm]![TboInvoice] is not null and 
    main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) or
(
    [Forms]![SearchForm]![PaxName] is not null and 
    main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
) or
( 
    [Forms]![SearchForm]![TboInvoice] is null and
    [Forms]![SearchForm]![PaxName] is null
)

也可以这样写:

select * from main
where
(
    [Forms]![SearchForm]![TboInvoice] is null or
    main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) and 
(
    [Forms]![SearchForm]![PaxName] is null or 
    main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
)

并注意到 Null & "*" 产生 "*",这可能会变成:

select * from main
where
    main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
    and 
    main.tbopax like [Forms]![SearchForm]![PaxName] & "*"

我怀疑你只是想要 and:

SELECT *
FROM Main
WHERE (Main.TboInvo LIKE [Forms]![SearchForm]![TboInvoice] & "*") AND
      (Main.TboPa LIKE [Forms]![SearchForm]![PaxName] & "*")

如果您使用 OR 并将任一文本框留空,则该文本框的条件将包含所有行。