由于将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表)作为记录源。这些行将填充SQL Server中的数据。 您可以在下面看到一个具有特定示例的行,即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 in:
希望它现在更清晰一点! 附:我现在只将一个十进制字段更改为18,2。
答案 0 :(得分:1)
一些事情:
没有理由尝试30位的十进制值?
Access仅支持28位数的压缩十进制列。因此,转到30会强制Access将该值视为字符串。
如果您将总数保持在28以下,那么您应该没问题。
您还遗漏了您正在使用的驱动程序。 (遗产,或本机10或本机11)。但是,所有3都应该没有小数点问题。
如此处所述,在对sql表进行任何更改后,您必须刷新链接表,否则这些更改将不会显示。
每次启动时都不需要重新链接代码。并且不清楚您的重新链接代码是如何工作的。如果重新链接代码生成tabledef对象的副本,然后重新启动相同的tabledef,则后端的更改可能不会显示。
我建议在测试期间,不要使用重新链接例程,只需右键单击给定的链接表并选择链接表管理器。然后单击一个表,然后刷新。
此外,在此测试期间的Access中,转储(删除)您在表设置中用于测试的任何格式(格式设置)。
我建议你重新开始,然后拿走原来的表并重新调整它们的大小。
Access应该并且可以轻松处理小数类型,但不清楚原始设置是什么。如果这些值从不需要超过小数的4位有效数字,那么我会考虑使用货币,但小数也应该有用。
答案 1 :(得分:1)
最近我找到了解决这个问题的方法!毕竟这一切都与语言设置有关..(和Access 2013中不接受十进制的小数30,2)。
我将Native客户端从10更改为11,并在我的连接字符串中添加了一个重要值:regional=no
。这解决了这个问题!
所以现在我的连接字符串是:
szSQLConnectionString = "DRIVER=SQL Server Native Client 11.0;SERVER=" & szSQLServer & ";DATABASE=" & szSQLDatabase & ";UID=" & szSQLUsername & ";PWD=" & szSQLPassword & ";regional=no;Application Name=OPS-FE;MARS_Connection=yes;
“