runsql - Acceso a VBA: error en tiempo de ejecución ''94'': uso no válido de nulo
select sql access vba (1)
Si está utilizando un LEFT JOIN
, permite nulos en su tabla JOIN
ed cuando no hay una fila coincidente. Supongo que tiene al menos un registro en su tabla de band
donde no hay una fila coincidente en la band2
en el campo stotis
.
Para averiguarlo, haz a:
SELECT *
FROM band
LEFT JOIN band2
ON [band].Stotis = band2.Stotis
WHERE band2.stotis IS NULL
Si obtiene algún golpe, tiene un problema de datos referenciales.
Su solución sería hacer una WHERE Band2.stotis IS NOT NULL
LEFT JOIN
utilizando WHERE Band2.stotis IS NOT NULL
o simplemente hacer una INNER JOIN
con los mismos criterios, que solo devolverá filas coincidentes en ambas tablas.
Intento calcular la distancia entre dos puntos (dada la latitud / longitud de esos puntos en formato decimal).
Código 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
Y obtengo el error Error ''94'' en tiempo de ejecución: uso inválido de nulo en esta línea "deg2rad = CDbl (deg * pi / 180)". Escribo una consulta:
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;
Tal vez alguien tiene una idea? Gracias por adelantado.