有谁知道这个错误意味着什么或如何解决它?我正在使用Access 2003和SQL2005。尝试在特定子表单上添加记录时出现。
[Microsoft] [SQL Native Client]强制转换规范的字符值无效(#0)
This MS bug report描述了相同的消息,但它是SQL Server 6.5中的一个已经解决的错误。
已解决:目标表上显然没有PK导致此问题,它与子窗体或来自Access的查询没有任何关系。 我甚至不知道这个数据库中没有PK 的表。将PK添加到目标表解决了它。奇怪的是,通过SQL本机客户端执行时出错的查询字符串相同,通过SSMS执行且没有错误。希望这可以帮助那些遇到这个奇怪信息的人。
答案 0 :(得分:6)
嗯,我会检查访问端的默认文本框。我还会在设计模式下调出链接表,并且您想要检查ms-access在此处假定的数据类型。对于不受支持的数据类型,ms-access通常会使用字符串,而sql server可能需要其他内容。
因此,检查主表中的主键(PK),然后检查子表中使用的(假设的)数据类型是否为外键(FK)列。当我们在此时,检查用于子表单控件中的子/主链接设置的表达式(不是表单,不是子表单,而是表单中用于链接这两个表的子表单控件) )。
如果sql server表中没有timestamp列,则访问中的子表单是敏感的。如上所述检查PK和FK数据类型并确保它们匹配(只需在ms-access中以设计模式显示表 - 您会收到有关设计模式为只读的错误消息,但只是继续,所以你可以检查/查看以确保数据类型匹配)。
因此对于子表,您需要PK,FK和时间戳列(您不必在子表单中显示TS列,但在表中需要它)。
ms-access中的子表单是敏感的,如果在sql表中不包含timestamp列,则通常会失败。 (访问使用这些行版本列来确定数据是否已更改)。
答案 1 :(得分:3)
视图中的某个字段是使用CAST函数计算/构建的吗?在这种情况下,您可能无权更新/添加该字段的值。
您可以在MS SQL Studio界面中执行视图并尝试插入记录吗?
答案 2 :(得分:1)
此问题的另一个原因是,如果更改表名而不更改视图,则该视图的“依赖关系”仍会使用表旧名称进行重新启动。
假设我有一个表'A'和一个来自'A'的视图'Av',我创建了一个名为'A'的新表,我将'A的名字改为'A_old'但是我没有执行ALTER VIEW,因此'Av'的依赖关系仍然保留在'A_old'上,但视图是从'A'派生的,并且当尝试将视图作为链接表打开时,它在Access中引发此错误
答案 3 :(得分:1)
我花了一天时间与一个Access ADP项目进行了斗争,该项目已导入到新的Access 2016 ACCDB文件中。最初我认为这是应用程序代码的问题,但我直接将这个键控记录放到表中。有趣的是,记录总是被写入 - 它似乎是引发错误的回读。分析插入sql并从SQL Management Studio运行它没有任何问题。
导致问题的表有一个GUID主键。将其切换到int列可以解决问题。
SQL数据库中还充斥着我在切换PK之前删除的几千个扩展属性。网络上有一个强烈的建议,即这些会导致问题。此过程的来源记录在此处:Remove All SQL Extended Properties
答案 4 :(得分:1)
我在Access 2016尝试更新ODBC链接的sQL Server数据库时遇到此问题。问题是用于连接两个表的字段中的空值。消除空值解决了问题
答案 5 :(得分:0)
仅基于您在上面提供的消息中,您似乎正在尝试为某些字段或参数等设置无效值...消息告诉您它正在尝试将值转换为特定数据类型但该值对于该数据类型无效......有意义吗?
请添加更多详细信息,以便我们为您提供更好的帮助。
答案 6 :(得分:0)
好的,我只是遇到了这种糟糕的体验,而且在我的情况下它与PK或任何这些东西无关。在Access中报告此问题的视图最初是在SQL Server中创建并使用的DATETIME的CAST到普通的旧DATE以摆脱不必要的时间部分。直到今天,这个视图在Access中引起了0个问题,但是如上所述开始产生胃灼热。
因此,我为MSS视图生成了一个Drop / Create脚本,运行它,重新链接了Access中的视图,Access数据库对结果感到满意。 Access中我所有的所谓表格基本上都是通过MSS链接进行报告。我只有1个表实际上做了更改。除此之外,我不会在Access中编辑视图。
这个消息当然没用,但在我看来这是我的解决方案。