【发布时间】:2017-09-29 07:40:58
【问题描述】:
我的 MSAccess 应用程序中有一个表单,可以跨 4 个字段搜索主数据库。您可以在 1 个字段中填写尽可能少的内容,也可以在所有 4 个字段中填写尽可能多的内容,或者介于两者之间的任何您想要的字段。
要搜索的数据库字段是:
- rmanbr - 整数
- custNbr - 整数
- 客户名称 - 文本
- invcmnbr - 文本(因为它将存储发票编号 (######) 或贷项通知单编号 (CM-####)
该表单有 4 个字段,可按上述各个字段进行排序:
- SrchRMANbr
- SrchCustNbr
- SrchCoName
- SrchInvCMNbr
我有一个选择要显示的所有数据的查询。将要过滤的 4 个字段用 Like "*" & [forms]![RMA Search]![FieldName] & "*" 填充到该特定查询的查询构建器的“条件”部分
数据库中的 rmanbr 和 customername 字段永远不会为 NULL,它们是不允许的。但是,invcmnbr 和 custnbr 可以并且经常是没有值的 NULL。
所以,我的搜索表单是上面列出的 4 个Srch 字段,用户可以在其中输入他们想要过滤的内容。有一个列表框旨在根据用户将用于过滤结果的文本框的“更改时”开始过滤结果。用户然后选择记录并继续他的快乐方式。
但是,ListBox 会从两个可以为 NULL 的字段中过滤掉所有 NULL 值,无论对应的 Srch 框是否为空白,因此在 custnbr 或 invcmnbr 字段中具有 NULL 的行没有出现在列表框中。
我尝试将Is Null 填充到我用来填充列表框的查询的“或”标准中。我在 Query Builder Criteria 部分“Is Null”的第二行尝试了它,即使我在 SrchRMANbr 字段中输入了一个数字,它也会显示所有行是否具有 NULL 值。理想情况下,输入 RMANbr 将通过 RMANbr 过滤是否存在 NULL 值,因为这是一个唯一值(主表中的任何 RMANbr 只能有 1 个)。如果我将 Like "*" & [forms]![RMA Search]![FieldName] & "*" 放在条件中(在同一行)Or Is Null 之后,它会让我更接近,但任何对 SrchCustNbr 或 SrchInvCMNbr 字段的搜索都会产生过滤结果以及所有 NULL该字段的值。
所以,简而言之,我需要一种方法:
1) 在用户开始在任何字段中输入数据之前,在列表框中显示所有值,无论是否为 NULL。
2) 当用户开始向SrchCustNbr 或SrchInvCMNbr 字段输入数据时,过滤掉NULL 值。
3) 当用户开始在SrchRMANbr 中输入数字时,保持 NULL 值,但正确过滤 RMA Nbr(因为这是主记录,这是尽可能具体的)
我希望我正确地传达了这个问题。如果您需要任何其他信息来帮助我解决问题,请告诉我。
【问题讨论】:
-
This method 需要一点“跳出框框思考”,因为 OR 条件仅引用搜索框,而不是过滤表。但它应该很好地适用于您的情况。
标签: forms ms-access listbox ms-access-2010