我正在开发一个遗留产品,并且我有一些通过 ADO 执行到 Access 数据库的 SQL,其中包含与 SQL Server 的链接表。当我执行 SQL 时,出现错误“未定义函数‘Round’”,但是 如果我接受查询并直接在 Access 中运行它工作正常. 。我知道一切都是正确的,这是一个特定于机器的问题,因为这是生产代码,它可以在其他机器上运行,并且已成功部署到许多客户端。

说实话,我什至不知道从哪里开始。我正在运行正确(最新)版本的 Jet/ADO/MDAC。

任何帮助,将不胜感激。

提前致谢。

编辑:显然,SQL 包含聚合函数“Round”。我知道 Jet 和 SQL 实现之间的差异。这个问题是由于我的机器上的组件出现问题而不是代码引起的。通过 MS Access 2007 但不能通过 ADO 执行时,SQL 可以正确执行。

有帮助吗?

解决方案

编辑2:评论中的正确解决方案:

沙卡尔佩什:如果它通过 Access 执行得很好,则可能是 Access 有可用的 DLL,该 DLL 具有 Round 函数。您使用的连接字符串是什么?

刺激8d:我不确定它怎么能用连接字符串来做。此代码适用于所有其他机器,无需任何更改;只是不在我的身上。

安多马尔:好吧,这就是你的问题,你的机器坏了。您仍然可以安装 VB6 SP6 或许。

刺激8d:好吧,SP6 修复了它。干杯 Anndomar,不知道为什么 SP6 修复了它,但它确实修复了!

编辑:根据您的评论 这个新闻组 帖子可能就是答案:

不幸的是,当您从访问外部运行查询(就像从VB一样)时,您与数据库的唯一连接是通过喷气引擎,这对大多数VBA功能都不了解。除了将数据返回到您的VB应用程序并使用该数据上的功能之外,没有其他方法可以解决此问题。

后来又发了两篇文章:

我解决了这个问题。使用服务包6更新了我的VB ...它照顾了问题。

旧答案在这里:

尝试使用 FLOOR() 而不是 ROUND()。

要将某些内容四舍五入到最接近的整数,您可以:

declare @floatmyboat float
set @floatmyboat = 1.51
select floor(@floatmyboat+0.5)

附:也许发布您收到的确切错误。如果是“The round function require 2 to 3 arguments.”,则意味着 Sql Server 正在 ROUND() 上运行。

其他提示

在round()函数在SQL Server中也存在。结果 唯一的区别是:在Access的精度是一个可选的参数,但在SQL Server中,你必须指定它

因此,这将只在Access工作,但不能在SQL Server:

select round(Column) from Table

这将在Access中的和工作的SQL Server的:

select round(Column,1) from Table
  

它可能是访问具有DLL   提供给它,它具有圆   功能

ACE /射流使用共享表达服务与VBA。从广义上讲,ACE /喷气支持为表达式所有VBA5功能(如从方法不同),其参数和返回值是标量类型(如无阵列,没有对象)。该Round()表达属于这一定义确实是相同的语义其VBA函数等效可用以ACE /射流。因为任何人都熟悉的ACE /喷气发动机应该知道,虽然,语义可以从VBA当量例如不同ACE /射流ANSI-92查询模式SQL

SELECT TYPENAME(ROUND(5, 1))

返回 '长',而VBA

?Typename(Round(5, 1))

返回 '整数'。

换句话说,Round()是不会在这里是问题所在。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top