update runsql ejemplos ejecutar docmd consultas consulta sql ms-access access-vba

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.