我想将以下MySQL转换为MDB查询。我对访问和.mdb数据库一点都不熟悉,但我对此项目没有选择余地。我在.mdb中设置了数据库,可以对它进行简单的查询。 我试图将以下查询转换为mdb查询。
SELECT name
, lat
, lng
, ( 3959 * acos( cos( radians('21.222') ) * cos( radians( lat ) )
* cos( radians( lng ) - radians('44.333') )
+ sin( radians('21.222') )
* sin( radians( lat ) ) ) ) AS distance
FROM markers
HAVING distance < '25'
ORDER BY distance ASC LIMIT 1
查询基本上是查询表标记,其中包含每个记录的latitute,经度信息,并返回虚拟地点 25 英里内的地点,纬度为经度为( 21.222, 44.333 )
谢谢, NIKHIL
答案 0 :(得分:4)
您需要为MySQL Mathematic函数内置的函数创建自己的函数,因为访问将无法识别它们。 TOP 1语法也略有不同。这些功能仅在访问应用程序本身中可用,因此您可能必须非常有创意,如何从PHP脚本中调用它。
将这些数学函数放入VBA代码模块中:
Public Function acos(x As Double) As Double
'gets the inverse cosine
acos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)
End Function
Public Function cos(x As Double) As Double
'gets the cosine
cos = Math.cos(x)
End Function
Public Function radians(degrees As Double) As Double
'returns a degrees measure in radians
Const PI = 3.1415926535
radians = degrees * PI / 180
End Function
Public Function sin(x As Double) As Double
'gets the sine
sin = Math.sin(x)
End Function
您的Access SQL查询将如下所示(使用查询构建器构建):
SELECT TOP 1 markers.name, markers.lat, markers.lng, (3959*acos(Cos(radians(21.222))*Cos(radians([lat]))*Cos(radians([lng])-radians(44.333))+Sin(radians(21.222))*Sin(radians([lat])))) AS distance
FROM markers
GROUP BY markers.name, markers.lat, markers.lng, (3959*acos(Cos(radians(21.222))*Cos(radians([lat]))*Cos(radians([lng])-radians(44.333))+Sin(radians(21.222))*Sin(radians([lat]))))
HAVING ((((3959*acos(Cos(radians(21.222))*Cos(radians([lat]))*Cos(radians([lng])-radians(44.333))+Sin(radians(21.222))*Sin(radians([lat])))))<25))
ORDER BY (3959*acos(Cos(radians(21.222))*Cos(radians([lat]))*Cos(radians([lng])-radians(44.333))+Sin(radians(21.222))*Sin(radians([lat]))));