MS Access查询:两个数字之间

时间:2015-09-21 06:09:44

标签: sql ms-access

这并不像听起来那么简单。我有一个场景,我在一个文本字段中输入一个数字到一个表单,然后我想按一个按钮搜索一个数字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)) 

2 个答案:

答案 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.91.1代表您值的10%页边距。您可以更改它们,例如应用组合框值。