1

我在一个表中有一个包含 9 条记录的数据集,它是测试数据。我有下面的数据样本。在下表中,第一行是标题。

+-------------+-------------+----------+---------------+---------------+
| 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,并且alvaTboPax搜索框中,我会看到所有这三个记录。

我试图使用这个:

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]));

和 [PaxName]== "alva" 形式的值,我什么也没得到。也许我错误地引用了表格?

4

2 回答 2

1

我怀疑你只是想要and

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

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

于 2019-08-31T11:07:09.287 回答
0

您的第一个查询返回所有内容的原因是,如果其中一个文本框TboInvoicePaxName为空,[Forms]![SearchForm]![TboInvoice] & "*"则将 yield "*",从而匹配所有记录。

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

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] & "*"
)

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

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 & "*"yield "*",这可能变成:

select * from main
where
    main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
    and 
    main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
于 2019-08-31T10:33:15.267 回答