MS Access を使用した SQL での数学関数の使用
-
12-09-2019 - |
質問
MS Access を使用して SQL View でクエリを設計しました。
select floor(num1) from t1;
実行すると「未定義の関数フロア」が表示されます。
同様のエラーが発生します Ceil
, Mod
,Power
, Sign
, Sqrt
, Trunc
, 、 そして initcap
機能。
Access データベース エンジンの SQL 構文には同等の機能がありますか?
解決
Floor() を Int() に置き換えます。アクセスヘルプファイル(この場合はクエリデザイナーの間にF1を押し、「関数」を検索することで、これを学びました。それにより、VBAとT-SQL関数を比較するヘルプトピックに連れて行ってくれました。
おそらく、これを見てみる必要があります。 Access データベース エンジン SQL リファレンス. 。Jet/ACE および Access 式サービスを通じてサポートされる関数に関する適切なオンライン リファレンスが見つかりません。何らかの理由で、Access ヘルプには Jet 3.0 以降 Jet/ACE 式が含まれておらず、この古いリソースは 1 ~ 2 年前に MSDN から最終的に削除されました :(
Access の外部で使用する Jet/ACE 式サービスは、Access 2007 内で SQL を実行するときに Access 式サービスを使用して使用できる、はるかに小さな関数のサブセットをサポートしていることに注意してください。大まかに言うと、単純なデータ型 (配列やオブジェクトなどとは異なります) を含む VBA5 関数 (メソッドとは異なります) は、Access ユーザー インターフェイスの外部でサポートされています。関数名のおおよそのリストについては、「Jet 4.0 Service Pack 3 以降でのサンドボックス モード操作の使用」セクションを参照してください。 この MSDN 記事.
また、VBE ヘルプの関数リファレンスを出発点としてください。
ヘルプ ファイルは完璧ではありませんが、少し検索すれば必要なものが見つかるはずです。
他のヒント
Public Function Floor(ByVal x As Double) As Double
'Be Because VBA does not have a Floor function.
'Works for positive numbers
'Turns 3.9 -> 3
'Note: Round(3.9) = 4
Dim s As String, dPos As Integer
s = CStr(x)
dPos = InStr(s, ".")
Floor = CLng(Left(s, dPos - 1))
End Function
で述べたように、フロアはアクセスで利用できない、あなたは、代替として、INT()を使用する必要があります。あなたが床を使用して主張する場合は、必ず以下に似た、あなたのmdbファイルにVBAモジュールの機能を作成することもできますが、それはおそらく過剰です。
Public Function floor(dblIn As Double, dec As Integer) As Double
decPosition = InStr(Str(dblIn), ".")
x = Left(dblIn, decPosition + dec - 1)
floor = x
End Function
あなたがこの機能のセットを作成するための追加機能を作成することができ、上記あなたが説明した他の数学の操作と同様ます。