【问题标题】:MS Access Between dates query is not working日期之间的 MS Access 查询不起作用
【发布时间】:2021-11-27 04:25:48
【问题描述】:

我是 Access DB 初学者。我有一个带有 SearchForm 的数据库,用户可以在其中输入搜索条件,单击“搜索”按钮并使用过滤后的结果填充子表单。

查询具有基于用户在搜索表单中的字段中输入的内容的简单查询

Like "*" & [Forms]![SampleSearchF]![txtMicrochip] & "*" 效果很好,但我的日期过滤器没有产生任何结果: Between [Forms]![SampleSearchF]![DateReceivFrom] And [Forms]![SampleSearchF]![DateReceivTo]

日期搜索基于的表格字段是数据类型:日期/时间,格式:短日期 搜索表单字段是格式短日期 子表单字段也是短日期

SearchButton 是一个重新查询宏

当我在查询中有这个查询条件时,所有搜索功能都不起作用。 有什么建议可以解决这个问题吗?任何帮助表示赞赏。

这是我用于搜索查询的 SQL 代码,

FROM IndividualsT INNER JOIN SamplesT ON IndividualsT.AnimalID = SamplesT.AnimalID
WHERE (((IndividualsT.SpeciesName) Like "*" & [Forms]![SampleSearchF]![txtSpeciesName] & "*") AND 
((IndividualsT.Microchip) Like "*" & [Forms]![SampleSearchF]![txtMicrochip] & "*") AND 
((IndividualsT.Name) Like "*" & [Forms]![SampleSearchF]![txtName] & "*") AND
 ((SamplesT.Location) Like "*" & [Forms]![SampleSearchF]![txtLocation] & "*") AND
 ((SamplesT.SampleReceived) Between [Forms]![SampleSearchF]![DateReceivFrom] And [Forms]![SampleSearchF]![DateReceivTo]));

样本T

SampleID AnimalID SampleReceived Location CollectionDate
1 1 18/08/2021 Tassie 10/08/2021
7 1 15/09/2021 Berlin 25/09/2021
13 12 25/09/2021 Sydney 4/09/2021
14 12 24/09/2021 New York 1/09/2021

个人T

AnimalID SpeciesName Microchip Name
1 Parrot 1234 Hugo
12 Koala 853 Sherlock

【问题讨论】:

  • 我不使用动态参数化查询。我更喜欢 VBA 来构建过滤条件并应用于表单或报告。但是,我测试并无法复制动态查询的问题。编辑问题以将示例数据显示为文本表。
  • 我输入了一些示例数据。数据来自两个表,表通过 AnimalID 字段连接
  • 搜索功能都不起作用 ...这是什么意思?请具体说明实际发生的情况。按钮单击时出现零结果?通过取出每个WHERE 条件来尝试调试,看看哪个是有问题的。
  • 您是否在表格中构建了查找字段?您将日期显示为国际结构。评论allenbrowne.com/ser-36.html
  • @KG12,如果所有搜索框都填写了值(即没有一个为空),查询是否有效。我有一个工作理论。使用足够宽的日期范围进行测试。我假设这些日期文本框被格式化为日期(不是文本)并与您的 dd/mm/yyyy 格式的 CPU 区域对齐。

标签: sql date ms-access between


【解决方案1】:

您的问题很可能是表单字段为空时的WHERE 逻辑。当为空时,LIKE 表达式返回为 **,这意味着任何内容,因此不会过滤掉任何行。但是,空日期与BETWEEN 子句冲突。如果表单字段为空,请考虑使用NZ 返回列本身:

(
  SamplesT.SampleReceived 
    BETWEEN NZ([Forms]![SampleSearchF]![DateReceivFrom], SamplesT.SampleReceived)
        AND NZ([Forms]![SampleSearchF]![DateReceivTo], SamplesT.SampleReceived)
); 

【讨论】:

  • 这行得通,但是我有设置,当我打开搜索表单时,子表单中不显示任何记录,只有在单击搜索按钮后,这不再起作用。我不希望每次有人打开搜索表单时都加载所有 20000 条记录。
【解决方案2】:

始终指定参数的数据类型

Parameters
    [Forms]![SampleSearchF]![txtSpeciesName] Text ( 255 ),
    [Forms]![SampleSearchF]![txtMicrochip] Text ( 255 ),
    [Forms]![SampleSearchF]![txtName] Text ( 255 ),
    [Forms]![SampleSearchF]![txtLocation] Text ( 255 ),
    [Forms]![SampleSearchF]![DateReceivFrom] DateTime,
    [Forms]![SampleSearchF]![DateReceivTo] DateTime;
Select *
From YourTable
Where ...

【讨论】:

  • 这适用于日期字段,谢谢! Bur现在其他字段不再起作用了吗?它们是未绑定的文本框,我没有添加其他格式。有什么想法吗?
  • 其他字段不再起作用 ...这不可能。然后发生了其他事情。创建一个新的简单查询进行验证,然后逐步展开。
猜你喜欢
  • 2016-05-30
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多