我使用 MS Access 在 SQL View 中设计了一个查询:
select floor(num1) from t1;
当我运行它时,我得到“未定义的功能层”。
Ceil
对于, Mod
, Power
, Sign
, Sqrt
, Trunc
, 和initcap
函数,我得到了类似的错误。
Access 数据库引擎的 SQL 语法是否具有等效功能?
我使用 MS Access 在 SQL View 中设计了一个查询:
select floor(num1) from t1;
当我运行它时,我得到“未定义的功能层”。
Ceil
对于, Mod
, Power
, Sign
, Sqrt
, Trunc
, 和initcap
函数,我得到了类似的错误。
Access 数据库引擎的 SQL 语法是否具有等效功能?
用 Int() 替换 Floor()。我通过在 Access 帮助文件中搜索来了解这一点,在这种情况下,在查询设计器中按 F1 并搜索“函数”。这将我带到了一个比较 VBA 和 T-SQL 函数的帮助主题。
您可能应该看一下Access 数据库引擎 SQL Reference。对于通过 Jet/ACE 和 Access 表达式服务支持的函数,我找不到很好的在线参考。由于某种未知的原因,自 Jet 3.0 以来,Access 帮助中没有包含 Jet/ACE 表达式,而这个陈旧的资源终于在一两年前从 MSDN 中删除了 :(
请记住,在 Access 外部使用的 Jet/ACE 表达式服务支持在 Access 2007 中运行 SQL 时使用 Access 表达式服务可能实现的更小的函数子集。从广义上讲,VBA5 函数(不同于方法)在 Access 用户界面之外支持涉及简单数据类型(不同于数组或对象);有关函数名称的大致列表,请参阅此 MSDN 文章的“使用 Jet 4.0 Service Pack 3 及更高版本的沙盒模式操作”部分。
此外,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
如前所述, Floor 无法访问,您应该使用 int() 作为替代方案。如果你坚持使用 Floor,你总是可以在你的 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
与您上面描述的其他数学运算类似,您可以创建其他函数来创建这组功能。