【发布时间】:2015-10-19 09:37:23
【问题描述】:
自从将 Access 数据迁移到 SQL 服务器后,我在十进制值方面遇到了多个问题。在我的 SQL 2012 服务器上的 SQL 表中,我将 Decimal 数据类型用于多个字段。过了一会儿,我首先尝试将十进制值设置为 18,2,但 Access 通过截断所有值(55,55 变成 50 等等)对此采取了奇怪的做法。
因此,在多次更改之后,Access 似乎接受了 SQL 服务器中的30,2 decimal 设置(现在这些值在链接的 Access 表中链接正确)。
几天前我偶然发现了这个问题,因为用户在编辑访问表单中的数字时遇到了问题。所以我检查了链接表的数据类型,似乎 Access 将decimal 30,2 值转换为Short Text data type,这显然是错误的。所以我做了一些研究,发现Access无法处理30,2 decimal,因此它被ODBC驱动程序转换为文本。 (见我之前的帖子:Access 2013 form field value gets cut off on changing the number before the point)
因此,为了修复后一个错误,我再次尝试(忘记我已经搞砸了)将十进制值更改为 17,2 / 18,2 和其他一些十进制值,但是在所有这些更改上,我又回到了截断问题...
我发现了一些关于它的帖子,但没有关于如何解决它的具体或答案。
一些附加信息:
- 使用 SQL 2012 服务器
- 使用 Access 2013
- 安装了 SQL Server Native Client 10 和 11。
- 查看注册码发现我使用的是ODBC驱动02.50版
- SQL 本地客户端 11 具有/使用 DriverODBC 版本 03.80,而本地客户端 10 使用 DriverODBC 版本 10.00(但不确定这是否相关)。
用图片更新
在访问表单中,我有多行将链接表(sql 表)作为记录源。这些行使用 SQL 服务器中的数据填充。 您可以在下面看到一个带有特定示例的行,即 eenh。 prijs 是从链接的 (SQL) 表中加载的。
现在,当我更改点前面的 5(因此将其设为 2555,00 而不是 5555,00)时,值会被截断:
======>>>
所以我对其进行了研究,并了解到我的 SQL 十进制 30,2 不被 Access 接受。所以我查看了我的访问链接表,看看该字段是什么类型的数据:
因此,特定列 (CorStukPrijs) 在 SQL 服务器中是十进制的 30,2,但这里是一个短文本(对不起荷兰语单词)。 顺便说一句,其他数字(可以)只是普通整数。
我还在链接表中添加了一个十进制值:
尽管如此,由于点之前的数字变化问题(回到表格 - 第一张图像),我将服务器中 30,2 的十进制类型更改为 18,2。 这是相同 5555 值的链接表中的结果:
它给出#Errors 和错误消息:
十进制值的缩放导致值被截断
(翻译过来可能和英文不太一样)
前面的 0,71 值结果为小数点 18,2:
希望现在更清楚一点! 附言我现在只是将一个十进制字段更改为 18,2。
【问题讨论】:
-
这很有趣。不久前,我正在为 C++ odbc-lib 进行单元测试,我试图让测试针对访问运行。对于我放弃的数字类型 - 说明 Access 根本无法使用数字(十进制)值。因此,您唯一的选择是让驱动程序将其转换为文本,并在写入时让驱动程序将文本转换回数值。如果'.'后面总是有两位数如果您在 Access 中将该列的类型设置为“Money”,您可以尝试访问是否可以“更好”工作。根据我的研究,这“类似于小数,但有 2 位数字”。
-
您能否举一个具体的例子来说明您遇到问题的值,以及问题究竟是什么?例如,如果您在 Access 前端使用没有千位分隔符的数字格式,是否一切正常?
-
您在示例中写道:值(55,55 变为 50,依此类推)。 您使用什么进行小数分隔?像这样的逗号 - 50,55 - 或像这样的点 - 50.55 - ?例如,在德国使用逗号,而在英语中则需要一个点。你考虑过吗?
-
如果您启动 Access,在数据表视图中打开链接表,然后在那里编辑
Decimal(18,2)列,会发生什么情况?小数点分隔符是否显示为逗号或句点?如果在编辑现有值时使用相同的分隔符,该值会被截断吗? (我刚刚尝试将我的机器设置为“法语(加拿大)”并且2,34被接受为有效的十进制值并且未被截断。) -
@GordThompson 好的,所以在数据表视图中,我现在有 2 个字段的 18,2 十进制。在 SQL 服务器中,当我现在查看我的访问权限时,我的值是 0.71 ,当我在链接表中用逗号 (0,71) 更改它时,它会更改为 71。所以它似乎只是除了 2 个小数位。机器语言为荷兰语,机器小数点为 2,分隔符为逗号。
标签: sql-server ms-access sql-server-2012 odbc