2011-12-29 14 views
1

次のMySQLをMDBクエリに変換します。私はアクセスと.mdbのデータベースに精通していませんが、私はこのプロジェクトの選択肢がありません。私は.mdbでデータベースをセットアップして、簡単なクエリを作成することができます。 次のクエリをmdbクエリに変換しようとしています。 MDBクエリへのMySQLクエリ

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 

クエリは、基本的には経度(21.222,44.333)として、各レコードのlatitute、経度情報を持つテーブルマーカーを照会し、緯度とダミー場所のマイル内にある場所を返します

おかげで、 ニキル

+0

を? –

+0

目次:SQLクエリーを構造からSQLに変更することができます。あなたはそのことを認識していますか? [this](http://pcmcourseware.com/blog/2008/09/17/creating-asql-query-in-access-2007/)を確認してください。 –

+0

PHPスクリプトから.mdbファイルをクエリしています。上記のリンクは機能しません – nikhil

答えて

4

アクセスがそれらを認識しませんので、あなたは、MySQLの数学関数で構築されたもののために独自の関数を作成する必要があります。 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]))));