【问题标题】:Access VBA: Run-time error '94': Invalid use of NullAccess VBA:运行时错误'94':无效使用Null
【发布时间】:2011-03-28 23:00:33
【问题描述】:

我尝试计算两点之间的距离(以十进制格式给出这些点的纬度/经度)。

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':在这一行“deg2rad = CDbl(deg * pi / 180)”中无效使用 Null。 我写一个查询:

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;

也许有人有想法?提前致谢。

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    如果您使用的是LEFT JOIN您允许空值在您的JOINed 表中没有匹配行时。我猜你的band 表中至少有一条记录,其中band2stotis 字段中没有匹配的行。

    要找出答案,请执行以下操作:

    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,这只会返回两个表中的匹配行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 2016-12-08
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多