我使用MS Access在SQL View中设计了一个查询:
select floor(num1) from t1;
当我运行它时,我得到“未定义的功能层”。
我为Ceil
,Mod
,Power
,Sign
,Sqrt
,Trunc
和initcap
收到类似错误功能
Access数据库引擎的SQL语法是否具有相同的功能?
答案 0 :(得分:12)
用Int()替换Floor()。我通过搜索Access帮助文件来学习这一点,在这种情况下,在查询设计器中点击F1,然后搜索“函数”。这让我得到了一个比较VBA和T-SQL函数的帮助主题。
你应该看一下Access database engine SQL Reference。我找不到通过Jet / ACE和Access表达式服务支持的函数的良好在线参考。由于某些未知原因,Access Help没有包含Jet / ACE表达式,因为Jet 3.0和这个老化的资源最终在一两年前从MSDN中删除了:(
请记住,在Access 2007中运行SQL时,在Access外部使用的Jet / ACE表达式服务支持使用Access表达式服务可能实现的更小的函数子集。一般来说,VBA5函数(不同于在Access用户界面之外支持涉及简单数据类型(与数组或对象不同)的方法;有关函数名称的近似列表,请参阅this MSDN article的“使用Jet 4.0 Service Pack 3及更高版本的沙盒模式操作”部分。
此外,VBE帮助中的函数引用应该是一个起始位置。
帮助文件并不完美,但有点搜索应该能满足您的需求。
答案 1 :(得分:1)
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
答案 2 :(得分:0)
如上所述,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
与上面描述的其他数学运算类似,您可以创建其他函数来创建这组功能。