我'm working on a legacy product and i have some SQL being executed through ADO, to an Access database with linked tables to SQL Server. I' m得到错误'Undefined function ' Round'当我执行SQL而 if i take the query and run directly in Access it works fine 时 . 我知道一切都是正确的,这是一个特定于机器的问题,因为这是 生产环境 代码,它适用于其他机器,并已成功部署到许多客户端 .
我甚至不确定从哪里开始说实话 . 我正在运行Jet / ADO / MDAC的正确(最新)版本 .
任何帮助,将不胜感激 .
提前致谢 .
EDIT: Obviously, the SQL includes the aggregate function 'Round'. I'm aware of the differences between Jet and SQL implementations. This problem is due to some problem with a component on my machine and NOT with the code. The SQL executes properly when done through MS Access 2007 but NOT through ADO.
3 回答
EDIT2:评论中的正确解决方案:
shahkalpesh:如果它通过Access执行得很好,那么可能是Access有可用的DLL,它具有Round功能 . 你正在使用什么连接字符串?
Stimul8d:我不确定连接字符串是怎么回事 . 此代码适用于其他所有计算机,无需更改;就在我的身上 .
Andomar:嗯,那就是你的问题,你的机器已经陷入困境 . 您仍然可以安装vb6 sp6 .
Stimul8d:嗯,SP6修好了 . 干杯Anndomar,不知道为什么SP6修复了它,但确实如此!
编辑:基于您的评论this newsgroup帖子可能是答案:
之后有两个帖子:
老答案在这里:
尝试FLOOR()而不是ROUND() .
要将某些内容舍入到最接近的整数,您可以:
附:也许发布你得到的确切错误 . 如果它是“圆函数需要2到3个参数 . ”,这意味着Sql Server在ROUND()上进行borking .
round()函数也存在于SQL Server中 .
唯一的区别是:在Access中,precision是一个可选参数,但在SQL Server中你必须指定它 .
所以这只适用于Access,但不适用于SQL Server:
这将在Access和SQL Server中工作:
ACE / Jet使用VBA的共享表达式服务 . 从广义上讲,ACE / Jet支持所有VBA5函数(与方法不同)作为表达式,其参数和返回值是标量类型(例如,没有数组,没有对象) .
Round()
表达式属于此定义,确实可用于ACE / Jet,其语义与其VBA函数等效 . 但是,任何熟悉ACE / Jet引擎的人都应该知道,语义可能与VBA相当,例如: ACE / Jet ANSI-92查询模式SQL返回'Long',而VBA
返回'整数' .
换句话说,
Round()
不会成为问题 .