I'm an Access DB beginner. I have a database with a SearchForm where the user can enter search criteria, click the Search button and populate the subform with the filtered results.
The query has simple query based on what the user enters in fields in the search form
Like "*" & [Forms]![SampleSearchF]![txtMicrochip] & "*" which work well, but my date filter does not produce any results:
Between [Forms]![SampleSearchF]![DateReceivFrom] And [Forms]![SampleSearchF]![DateReceivTo]
The table fields that the date search is based on are Data Type:Date/Time , Format: Short Date The Search Form fields are Format Short Date The subform fields are also Short Date
SearchButton is a requery macro
And when I have the this query criteria in the query, none of the search functions work. Any suggestions where I could look to solve the issue? Any help is appreciated.
Here is my SQL code for the search query,
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]));
SamplesT
| 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 |
IndividualsT
| AnimalID | SpeciesName | Microchip | Name |
|---|---|---|---|
| 1 | Parrot | 1234 | Hugo |
| 12 | Koala | 853 | Sherlock |
CodePudding user response:
Always specify the data type of the parameters:
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 ...
CodePudding user response:
Likely, your issue is the WHERE logic when form fields are empty. When empty, LIKE expressions return as ** which means anything, so no rows are filtered out. However, empty dates conflict with BETWEEN clause. Consider using NZ to return the column itself if form fields are empty:
(
SamplesT.SampleReceived
BETWEEN NZ([Forms]![SampleSearchF]![DateReceivFrom], SamplesT.SampleReceived)
AND NZ([Forms]![SampleSearchF]![DateReceivTo], SamplesT.SampleReceived)
);

