Access 2000 - 转换规范的无效字符值(#0) - 访问SQL

时间:2015-09-28 09:01:37

标签: sql-server ms-access

最近我将Access 2000后端数据和表迁移到了2012 SQL服务器。在访问前端中,我链接了已迁移的SQL表。大多数工作正常,除了(现在)一种形式。

在此表单中,使用此查询从SQL Server加载数据:

SELECT * FROM qryAbonementens WHERE EindDatum is null or EindDatum>=now()

它还使用了过滤器和排序:

((Lookup_cmbOrderNummer.Omschrijving="GJK"))

排序:

Lookup_cmbOrderNummer.Omschrijving

这些事情可能无关紧要,但我会尽可能地发布。

数据在表单中加载完美,但是当我尝试更改表单中的记录时,我不断得到:

  

错误转换规范(#0)的无效字符值

在检查具有相同问题的帖子时,我遇到了这篇文章:

MS Access error "ODBC--call failed. Invalid character value for cast specification (#0)"

这让我相信我错过了某个地方的PK所以首先我在Access设计模式中检查链接表:

enter image description here

Tekst = text,Numeriek = numeric,Datum / tijd = date(抱歉它是荷兰语)。

SQL中的相同表格如下所示:

enter image description here

他们都有PK所以我想这不是问题。

但是,在查看这两种数据类型时,您可以在InkoopPrijsVerkoopPrijs字段中看到2个差异。在SQL中,这两个是decimals(30,2),并且在链接访问表的设计视图中,我猜它们是未知的,因此它们被转换为text值。也许这是我的错误信息的原因?

我试图更改的记录和错误是这一个(但它在所有记录上): enter image description here

我已经在某处读到了向SQL服务器添加时间戳字段可能会有所帮助,但我不知道它在我的情况下也适用或者如何操作。

2 个答案:

答案 0 :(得分:2)

正如您所猜测的那样,decimal(30, 2)列是问题所在 它们太大,Access无法用作数字。

我可以使用Access 2010重现问题,尽管我可以在字段中输入数字数据。但是当我输入文本时,我会收到完全相同的错误消息。

decimal(18,2) vs. decimal(30,2)

decimal(18,2)工作正常(这是Sql Server 2008的默认小数精度) 当然你没有价格在10 ^ 30范围内? : - )

design view

您也可以考虑使用money数据类型,但我不知道Access 2000的工作原理。

答案 1 :(得分:0)

好吧我修好了。 @ Andre451关于将SQL Server中的30,2十进制值更改为18,2的帖子给了我the record is changed by another user错误。这使我对问题的看法不同,而不是修复

  

错误转换规范(#0)的无效字符值

错误我看了

  

记录被另一个用户错误更改

我发现了这篇文章:Linked Access DB "record has been changed by another user"

这里有人建议将TimeStamp字段添加到SQL表中。所以我做了,现在它似乎再次工作!它似乎也适用于原始(十进制30,2)值!