Microsoft Access中的参数

时间:2011-02-17 01:38:23

标签: sql database ms-access

我真的很困惑参数如何在Microsoft Access中工作。我知道参数应该用于允许用户在运行查询时键入值 - 而不必修改每个实例的查询。

所以,让我们使用以下示例。

 SELECT countyTable.countyName, Sqr((69.1*(46.47-avgLatitude))^2+(69.1*(-90.17-avgLongitude)*Cos(avgLatitude/57.3))^2) as Distance
 FROM countyTable
 WHERE ((([avgLatitude]-5)<46.47) AND (([avgLatitude]+5)>46.47) AND (([avgLongitude]-5)<-90.17) AND (([avgLongitude]+5)>-90.17))
 ORDER BY Sqr((69.1*(46.47-avgLatitude))^2+(69.1*(-90.17-avgLongitude)*Cos(avgLatitude/57.3))^2), countyTable.countyName

1)我正在选择包含SQR功能的列。我还将该列命名为“距离”。但是,当我尝试在所述列上进行ORDER BY时 - 并将其称为“距离” - 它要求输入值而不是对该列进行排序。我可以获得ORDER BY查询的唯一方法是从SELECT行复制表达式。这似乎没必要。

2)现在,我有一些硬编码的值。我可能不太关心值'57 .3'和'69 .1'然而,对于'46 .47'我想用'x2'和-90.17代替'Y2'。我一直试图用参数写这个,Access要求'x2'和'y2'的每个实例的值。这对我没有任何帮助,所以我把它们硬编码了。

有任何帮助吗?谢谢!

2 个答案:

答案 0 :(得分:2)

  

1)我正在选择包含SQR功能的列。我还将该列命名为“距离”。但是,当我尝试在所述列上进行ORDER BY时 - 并将其称为“距离” - 它要求输入值而不是对该列进行排序。我可以获得ORDER BY查询的唯一方法是从SELECT行复制表达式。这似乎没必要。

是Access做得不好。现在,每个真正的DBMS都支持通过SELECT子句中创建的列别名进行排序。要在Access中执行此操作,您可以执行您正在执行的操作(重复表达式)或对其进行子查询,例如。

select a,b,c
from (
   select a, b, a+b as C
   from sometable
) AS SUBQUERIED
order by c
  

2)我一直试图用参数写这个,Access询问每个'x2'和'y2'实例的值。

你做错了。访问权限应仅提示一次。如果您有这样的查询

select a, b, a+b as C
from sometable
where a > [x] and y > [x]

它会看到两个[x]是相同的 - 并且两个都只有一个提示。只需确保 拼写完全相同。

答案 1 :(得分:1)

如果您想要这样的简化示例:

SELECT
    countyTable.countyName,
    Sqr((69.1*(46.47-avgLatitude))^2+(69.1*(-90.17-avgLongitude)*Cos(avgLatitude/57.3))^2) as Distance
FROM countyTable
ORDER BY Distance;

对于ORDER BY,您可以通过字段列表中的序号位置引用该复杂的距离表达式。

SELECT
    countyTable.countyName,
    Sqr((69.1*(46.47-avgLatitude))^2+(69.1*(-90.17-avgLongitude)*Cos(avgLatitude/57.3))^2) as Distance
FROM countyTable
ORDER BY 2;

至少从Jet 4(Access 2000)以及较新的ACE数据库引擎支持该方法。