【问题标题】:Issues formatting numbers in Access from SQL Server query从 SQL Server 查询访问中的数字格式问题
【发布时间】:2014-01-10 05:33:57
【问题描述】:

我有一个使用 SQL Server 后端的生产数据库,其中的表链接到 Access 前端。出于性能原因,我尝试将大部分报表查询编写为 SQL 视图,并简单地从 Access 传入参数。

我遇到的问题是我似乎不允许格式化在 SQL 视图中计算的字段。

例如,我有一张桌子:

CaseLot    Drums    GrossWeight    %H2O
   01        10       10,301       5.21

Drums、GrossWeight 和 Drums 都是十进制数据类型,但每个都有不同的比例。

在我看来,我包括上表中的值,还包括以下计算字段:

[GrossWeight] - 19.6*[Drums] AS NetWeight
([GrossWeight] -19.6*[Drums])*(100-[%H2O])/100 AS DryWeight

当我将这些计算字段拉到 Access 时,格式化 NetWeight 字段没有问题,但它不会让我为 DryWeight 字段设置格式。这真的很令人沮丧,因为我想将 DryWeight 字段显示到小数点后两位,但它不会这样做。

我也尝试在 Access 中应用 Round() 函数,但是当我包含要舍入到的比例时,它似乎给了我一个“循环引用”错误。 Round(DryWeight) 可以将其四舍五入到小数点后 0 位,但 Round(DryWeight,2) 给我一个错误。

这里发生了什么?

【问题讨论】:

  • 运行时显示的干重代码会产生什么?另外,您可以选择 %H2O 吗?也许问题在于以特殊字符开头的列名。
  • 它为给定的示例生成 9578.5295。我想显示为 9,578.53。选择 %H2O 没有任何问题。我构建了更复杂的求和查询,这些查询也可以正常工作,除了这个随机格式问题。
  • 你试过这里提到的格式化功能吗? techonthenet.com/access/functions/string/format.php
  • 进步!当我在 Access 查询中包含 Format() 函数时,它可以工作。这些计算值的属性选项卡中的“格式”下拉列表是否有原因是空白的?
  • 几乎就像 Access 将这些计算出来的数字识别为字符串一样。

标签: sql ms-access formatting sql-view


【解决方案1】:

几乎就像 Access 将这些计算出来的数字识别为字符串一样。

是的。我使用 SQL Server 2005 和 Access 2010 重新创建了该问题。我在 SQL Server 中有一个名为 [CaseLotView] 的视图 ...

CREATE VIEW [dbo].[CaseLotView]
AS
SELECT
    CaseLot, 
    Drums, 
    GrossWeight, 
    [%H2O], 
    GrossWeight - 19.6 * Drums AS NetWeight, 
    (GrossWeight - 19.6 * Drums) * (100 - [%H2O]) / 100 AS DryWeight
FROM
    dbo.CaseLotData

...当我在 Access 中创建链接表并打开它时,我看到以下内容:

注意 [NetWeight] 值是右对齐的(解释为数字),而 [DryWeight] 值是左对齐的(解释为字符串)。

一种解决方法是创建一个基于链接表的 Access 查询,使用 CDbl() 函数将 [DryWeight] 转换为数字:

SELECT 
    dbo_CaseLotView.CaseLot, 
    dbo_CaseLotView.NetWeight, 
    CDbl([DryWeight]) AS dblDryWeight
FROM dbo_CaseLotView;

基于该查询的报告会将 [dblDryWeight] 识别为数字并提供预期的格式选项。

(请注意,虽然 VBA 中有一个 CDec() 函数,但它在 Access 查询中不起作用 - 参考:here。)

【讨论】:

  • 感谢您的解决方法!发生这种情况有原因吗?为什么 Access 会将其解释为字符串?
  • @bmansk8s 我无法提供具体原因,但有时如果 (1) 结果数据类型是 Access 不提供的数据类型,Access 会将数字结果视为字符串直接支持,或者 (2) 如果涉及到某种类型的杂耍(在这种情况下,SQL Server 视图实际上返回的是浮点数而不是小数,基于小数位数显示的地方)。
  • 好的,很好。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多