2011-03-28 100 views
3

我嘗試計算兩點之間的距離(給定以十進制格式表示這些點的緯度/經度)。訪問VBA:運行時錯誤'94':無效的空使用

VBA代碼:

Const pi = 3.14159265358979 

Function distance(lat1, lon1, lat2, lon2) 
Dim theta, dist 
theta = lon1 - lon2 
dist = Sin(deg2rad(lat1)) * Sin(deg2rad(lat2)) + Cos(deg2rad(lat1)) * Cos(deg2rad(lat2)) * Cos(deg2rad(theta)) 
dist = acos(dist) 
dist = rad2deg(dist) 
distance = (dist * 60 * 1.1515) * 1.609344 
End Function 

Function acos(rad) 
If Abs(rad) <> 1 Then 
acos = pi/2 - Atn(rad/Sqr(1 - rad * rad)) 
ElseIf rad = -1 Then 
acos = pi 
End If 
End Function 

Function deg2rad(deg) 
deg2rad = CDbl(deg * pi/180) 
End Function 

Function rad2deg(rad) 
rad2deg = CDbl(rad * 180/pi) 
End Function 

我也得到錯誤運行時錯誤 '94':在該線的無效使用Null 「deg2rad = CDbl(度* PI/180)」。 我寫了一個查詢:

SELECT DISTINCT 

([band].E_laip+([band].E_min*(1/60))+([band].E_sec*(1/3600))) AS Band_E_dec, 
([band2].E_laip+([band2].E_min*(1/60))+([band2].E_sec*(1/3600))) AS Band2_E_dec, 
([band].N_laip+([band].N_min*(1/60))+([band].N_sec*(1/3600))) AS Band_N_dec, 
([band2].N_laip+([band2].N_min*(1/60))+([band2].N_sec*(1/3600))) AS Band2_N_dec, 

distance([Band_N_dec],[Band_E_dec],[Band2_N_dec],[Band2_E_dec]) AS Atstumas 

FROM [band] LEFT JOIN band2 ON [band].Stotis = band2.Stotis; 

也許有人有想法?提前致謝。

回答

2

如果您使用的是LEFT JOIN你允許空值在JOIN編表在沒有匹配的行。我猜想您的band表中至少有一條記錄,stotis字段的band2中沒有匹配的行。

爲了找到答案,做了:

SELECT * 
FROM band 
LEFT JOIN band2 
ON [band].Stotis = band2.Stotis 
WHERE band2.stotis IS NULL 

如果你得到任何命中你有一個參考的數據問題。

您的解決方案是使用WHERE Band2.stotis IS NOT NULL執行LEFT JOIN或僅使用相同條件執行INNER JOIN,該條件只會返回兩個表中的匹配行。