访问链接表,从SQL服务器

时间:2015-10-19 09:37:23

标签: sql-server ms-access sql-server-2012 odbc

由于将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 ver 03.80,本机客户端10使用DriverODBC ver 10.00(不确定这是否相关)。

更新图片

在访问表单中,我有多行,其中有一个链接表(sql表)作为记录源。这些行将填充SQL Server中的数据。 您可以在下面看到一个具有特定示例的行,即eenh。 prijs从链接(SQL)表加载。

enter image description here

现在,当我更改点前面的5(因此使其为2555,00而不是5555,00)时,值将被切断:

enter image description here

==>>>

enter image description here

所以我对它进行了研究,并了解我的SQL十进制30,2不被Access接受。所以我查看了访问链接表,看看该字段的数据类型是什么:

enter image description here

因此特定列(CorStukPrijs)在SQL服务器中是小数30,2但这里是一个简短的文本(对于荷兰语来说很抱歉)。 顺便说一下,其他数字(可以)就是正常的整数。

在我访问的链接表 - 数据表视图中,值如下所示: enter image description here

我还在链接表中添加了一个十进制值:

enter image description here

在我的SQL服务器中,(相同)数据如下所示: enter image description here

虽然,由于点之前的数字问题发生了变化(回到表格中 - 第一张图片),我将服务器中的小数类型30,2改为18,2。 这是链接表中相同5555值的结果:

enter image description here

它提供了#Errors和错误消息:

  

小数值的缩放导致截断值

(翻译它可能不会像英语那样)

之前的0,71值结果为小数18,2 in:

enter image description here

希望它现在更清晰一点! 附:我现在只将一个十进制字段更改为18,2。

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;