这并不像听起来那么简单。我有一个场景,我在一个文本字段中输入一个数字到一个表单,然后我想按一个按钮搜索一个数字CLOSE(或精确)到该数字。如果我将此字段留空,我希望它返回所有结果。
我(非常)是SQL和Access的新手,所以我遇到了一些麻烦。我知道如何找到确切的值:
Like "*" & [Forms]![Navigation Form]![NavigationSubform].[Form]![txtFuelConsumption] & "*"
(我的文本框名为txtFuelConsumption)
我要回复的一个例子:
假设我在文本框中输入数字“10”,然后运行查询。我想让它向我展示燃油消耗率为7到13的所有数据条目。
我尝试使用Between函数,但无法绕过它。
三江源!
编辑:想到我可以采取的另一种方法。我可以使用值“small,medium,large”创建一个独立的组合框,并使用查询将特定值分配给“small,medium和large”。虽然,我不知道该怎么做。我只是把它作为一个建议,以防人们无法弄清楚我的第一个问题。
编辑:
SELECT [Car Table].Car_VIN, [Car Table].Car_Class, [Car Table].Car_BodyType,
[Car Table].Car_Colour, [Car Table].Car_Make, [Car Table].Car_Model, [Car
Table].Car_EngineType, [Car Table].Car_TransmissionType, [Car
Table].Car_GPSAvailability, [Car Table].Car_BootSpace, [Car
Table].Car_FuelConsumptRate, [Car Table].Car_SeatNumber, [Car
Table].Car_GreenStarRating, [Car Table].Car_ANCAPSafetyRating, [Car
Table].Car_DriveType
FROM [Car Table]
WHERE ((([Car Table].Car_VIN) Like "*" & [Forms]![Navigation Form]!
[NavigationSubform].[Form]![txtVIN] & "*") AND (([Car Table].Car_Class) Like "*"
& [Forms]![Navigation Form]![NavigationSubform].[Form]![cmbClass] & "*") AND
(([Car Table].Car_DriveType) Like "*" & [Forms]![Navigation Form]!
[NavigationSubform].[Form]![cmbDriveType] & "*") AND (([Car Table].Car_BodyType)
Like "*" & [Forms]![Navigation Form]![NavigationSubform].[Form]![cmbBodyType] &
"*") AND (([Car Table].Car_Colour) Like "*" & [Forms]![Navigation Form]
![NavigationSubform].[Form]![cmbBodyType] & "*") AND (([Car Table].Car_Make)
Like "*" & [Forms]![Navigation Form]![NavigationSubform].[Form]![txtMake] & "*")
AND (([Car Table].Car_Model) Like "*" & [Forms]![Navigation Form]
![NavigationSubform].[Form]![txtModel] & "*") AND (([Car Table].Car_EngineType)
Like "*" & [Forms]![Navigation Form]![NavigationSubform].[Form]![cmbEngineType]
& "*") AND (([Car Table].Car_TransmissionType) Like "*" & [Forms]![Navigation
Form]![NavigationSubform].[Form]![cmbTransmissionType] & "*") AND (([Car
Table].Car_GPSAvailability) Like "*" & [Forms]![Navigation Form]
![NavigationSubform].[Form]![ChGPSAvailability] & "*") AND (([Car
Table].Car_SeatNumber) Like "*" & [Forms]![Navigation Form]
![NavigationSubform].[Form]![txtSeatNumber] & "*") AND (([Car
Table].Car_GreenStarRating) Like "*" & [Forms]![Navigation Form]
![NavigationSubform].[Form]![cmbGreenStarRating] & "*") AND (([Car
Table].Car_ANCAPSafetyRating) Like "*" & [Forms]![Navigation Form]
![NavigationSubform].[Form]![cmbANCAPSafetyRating] & "*") AND
((Abs([car_fuelconsumptrate]-Nz([Forms]![Navigation Form]![NavigationSubform]
.[Form]![txtFuelConsumption],[car_fuelconsumptrate]))<=Nz([2],9999)) AND
((Abs([car_bootspace]-Nz([Forms]![Navigation Form]![NavigationSubform].[Form]
![txtBootSpace], [car_BootSpace]))<=Nz([100],9999)));
语法错误编辑:
AND ((Abs([car_fuelconsumptrate]-Nz([Forms]![Navigation Form]![NavigationSubform].[Form]![txtFuelConsumption],[car_fuelconsumptrate]))<=Nz([2],9999))
答案 0 :(得分:1)
首先,您当前的表达式找不到单个值,它也会找到100。
对于范围,请使用以下方法:
Select
*,
Abs([ConsumptionRate]-[Forms]![Navigation Form]![NavigationSubform].[Form]![txtFuelConsumption]) As ConsumptionRange
From
[Car table]
Where
Abs([ConsumptionRate]-Nz([Forms]![Navigation Form]![NavigationSubform].[Form]![txtFuelConsumption],[ConsumptionRate])) <= Nz([InputDeviation], 9999)
Order By
Abs([ConsumptionRate]-[Forms]![Navigation Form]![NavigationSubform].[Form]![txtFuelConsumption]) Asc
答案 1 :(得分:0)
VBA提案:
请考虑您的字段名称为[FuelConsumptionRate]
。
Private Sub btn_Click()
' Check whether no value is typed
myValue = txtFuelConsumption.Value
If(IsNull(myValue)) Then
Me.Filter = "" ' Clear the filter
Else
' Set a new filter with values calculated
' Me represents the Form object
Me.Filter = "(([FuelConsumptionRate] < " & (myValue*1.1) & ") And (" _
"([FuelConsumptionRate] > " & (myValue*0.9) & "))"
End If
' Do requery, so the new filter is applied
Me.Requery
End Sub
值0.9
和1.1
代表您值的10%
页边距。您可以更改它们,例如应用组合框值。