MySQL 查询到 MDB 查询

Posted

技术标签:

【中文标题】MySQL 查询到 MDB 查询【英文标题】:MySQL query to MDB query 【发布时间】:2011-12-29 17:44:49 【问题描述】:

我想将以下 mysql 转换为 MDB 查询。我完全不熟悉 access 和 .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)

谢谢, 尼基尔

【问题讨论】:

顺便说一句:您可以进行 SQL 查询,将查询编辑从结构更改为 SQL - 您知道吗?签出this。 我正在从 php 脚本查询 .mdb 文件,上面的链接不起作用 【参考方案1】:

您需要为那些内置的 MySQL 数学函数创建自己的函数,因为 access 无法识别它们。 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]))));

【讨论】:

以上是关于MySQL 查询到 MDB 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 查询远程 MS ACCESS .mdb 数据库

有没有办法用 C++ 查询 .accdb/.mdb 文件?

如何对 MDB 文件运行 SQL 查询?

求助asp两个字段中模糊查询

时间的 MDB 查询

mdb 工具 sql 查询表名空间分隔