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

Sql server Access 2000-强制转换规范(#0)的字符值无效-访问SQL,sql-server,ms-access,Sql Server,Ms Access,最近,我已将Access 2000后端数据和表迁移到2012 SQL server。在access前端,我链接了迁移的SQL表。除了(现在)一种形式外,大部分都很好用 在此表单中,使用以下查询从SQL server加载数据: SELECT * FROM qryAbonementens WHERE EindDatum is null or EindDatum>=now() 它还使用了过滤器和排序: ((Lookup_cmbOrderNummer.Omschrijving="GJK"))

最近,我已将Access 2000后端数据和表迁移到2012 SQL server。在access前端,我链接了迁移的SQL表。除了(现在)一种形式外,大部分都很好用

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

SELECT * FROM qryAbonementens WHERE EindDatum is null or EindDatum>=now()
它还使用了过滤器和排序:

((Lookup_cmbOrderNummer.Omschrijving="GJK"))
这类:

Lookup_cmbOrderNummer.Omschrijving
这些事情可能无关紧要,但我会尽可能多地发布

数据完美地加载到表单中,但是当我尝试更改表单中的记录时,我会不断得到以下结果:

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

在签出具有相同问题的帖子时,我遇到了以下问题:

这让我相信我在某个地方遗漏了一个PK,因此首先我在Access设计模式下检查了链接表:

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

SQL中的同一个表如下所示:

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

但是,当查看这两种数据类型时,您可以在
InkoopPrijs
VerkoopPrijs
字段上看到两种不同。在SQL中,这两个是
小数(30,2)
,在链接访问表的设计视图中,它们是未知的,因此它们被转换为
文本
值。也许这就是我的错误消息的原因

我正在尝试更改的记录(但所有记录上都有此记录)出现错误:


我在某个地方读到,在SQL server中添加时间戳字段可能会有所帮助,但我不知道它在我的情况下也能起作用,也不知道如何做到这一点。

正如您所猜测的,
十进制(30,2)
列是问题所在。
它们太大,无法作为数字使用

虽然我可以在字段中输入数字数据,但我可以重现Access 2010的问题。但当我输入文本时,我会得到完全相同的错误消息

十进制(18,2)
工作正常(这是Sql Server 2008的默认十进制精度)。
您的价格肯定不在10^30范围内吗?:-)


你也可以考虑使用<代码>货币< /COD>数据类型,虽然我不知道Access 2000的使用效果如何。

< P>好吧,我把它修复了。Andre451关于将SQL server中的30,2十进制值更改为18,2的帖子给了我一个
记录被另一个用户更改了
错误。这使我对问题的看法有所不同,而不是解决问题

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

错误我看了一下

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

我看到了这样一个帖子:


这里有人建议在SQL表中添加一个时间戳字段。所以我做了,现在它似乎又起作用了!而且它似乎也适用于原始(十进制30,2)值

感谢您的输入,但它不起作用。我将SQL server中的数据类型更改为
Decimal(18,2)
,而不是
30,2
。但这并没有产生任何效果。我现在得到了一个错误:
数字的缩放导致了值的削减。这导致我现在有很多或
#error
值(所以我想我需要30,2)?此外,当您更改记录时,我还获得了
,该记录已被其他用户更改,如果保存记录,更改将被覆盖。但保存记录已灰显..P.S。当我将十进制的SQL长度更改为
18,2
@Nicolas时,access链接表从文本更改为
numeric
decimal 18,2
):何时何地出现缩放错误?在那个表格中,小数点前有超过18位的数字吗?就在我重新打开表格之后。但奇怪的是我没有任何大的价值。。。最大值约为5个数字。缩放错误似乎只发生在虚拟值上(不确定,因为它们不断弹出)。但是,如果我更新了一条正常记录,就会出现前面描述的保存错误。