2011-02-17 75 views
0

我真的和參數如何在Microsoft Access中工作混淆。我知道參數應該用於允許用戶在運行查詢時鍵入值 - 而不必修改每個實例的查詢。微軟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

1)我正在選擇一個包含SQR函數的列。我也有那個名爲'距離'的列。但是,當我嘗試對所述列進行ORDER BY時 - 將其稱爲「距離」 - 它會要求一個值,而不是在該列上進行排序。我可以查詢到ORDER BY的唯一方法是從SELECT行復製表達式。這似乎沒有必要。

是訪問做得不好。每個真正的DBMS現在都支持按SELECT子句中創建的列別名進行排序。要在Access中執行此操作,您可以執行您正在做的操作(重複表達式)或對其進行子查詢,例如

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

2)如何我一直在試圖與參數寫這篇文章,訪問請求爲「X2」和「Y2」的每個實例值。

你做錯了。訪問應該只提示一次。如果你有這樣的查詢

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

它會看到兩個[x]是相同的 - 並且只有一個提示符。只要確保他們拼寫完全一樣。

+0

非常感謝!這是一個很大的幫助。 – 2011-02-17 03:03:51

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數據庫引擎。