代码之家  ›  专栏  ›  技术社区  ›  Dale

MS Access错误“ODBC--调用失败。强制转换规范的字符值无效(0)“

  •  5
  • Dale  · 技术社区  · 15 年前

    有人知道这个错误是什么意思或如何解决它吗?我使用的是Access2003和SQL2005。当试图在一个特定的子窗体上添加一个记录时,它就会出现。

    [Microsoft][SQL Native Client]转换规范的字符值无效(0)

    This MS bug report 描述了相同的消息,但这是SQL Server 6.5中已经解决的一个错误。

    解决了的: 显然,目标表上没有pk导致了这种情况,它与子窗体或access中的查询没有任何关系。 我甚至不知道这个数据库中有没有pk的表 . 向目标表添加pk解决了这个问题。奇怪的是,当通过SQL本机客户端执行时,通过SSMS执行时,没有错误的查询字符串是相同的。希望这能帮助其他遇到这种奇怪信息的人。

    7 回复  |  直到 6 年前
        1
  •  6
  •   Albert D. Kallal    15 年前

    嗯,我会选中访问端的默认文本框。我还将在设计模式下打开链接表,您需要检查这里MS Access假定的数据类型。对于不受支持的数据类型,MS Access通常使用字符串,而SQL Server可能需要其他数据类型。

    因此,请同时检查主表中的主键(pk),然后检查在子表中使用(假定)的数据类型,以查找外键(fk)列。在此期间,请检查用于子窗体控件中的子/主链接设置的表达式(不是窗体,不是子窗体,而是用于窗体中链接这两个表的子窗体控件)。

    如果在SQL Server表中没有timestamp列,则access中的子窗体是敏感的。如前所述,检查pk和fk数据类型并确保它们匹配(只需在MS Access中以设计模式显示表——您会收到一条关于设计模式为只读的错误消息,但只需继续,这样您就可以检查/查看以确保数据类型匹配)。

    因此,对于子表,您需要一个pk、一个fk,以及一个时间戳列(您不必在子表单中显示ts列,但需要在表中显示)。

    MS Access中的子窗体是敏感的,如果不在SQL表中包含时间戳列,则通常会失败。(Access使用这些行版本列来确定数据是否已更改)。

        2
  •  3
  •   Philippe Grondier    15 年前

    视图中的某个字段是用cast函数计算/生成的吗?在这种情况下,您可能无权更新/添加该字段的值。

    可以在MS SQL Studio界面中执行视图并尝试插入记录吗?

        3
  •  1
  •   loudstil    13 年前

    这个问题的另一个原因是,如果在不更改视图的情况下更改表名,那么该视图的“依赖项”仍然会与表的旧名称重新组合。

    假设我有一个表“a”和一个从“a”派生的视图“av”,我创建了一个名为“a”的新表,并将“a”的名称更改为“a旧”,但我没有执行alter view,因此“av”的依赖项仍然保留在“a旧”上,但该视图是从“a”派生的,当试图将视图作为链接打开时,它会在access中引发此错误。D表

        4
  •  1
  •   winnt93    8 年前

    我刚刚花了一天时间和一个AccessADP项目做斗争,这个项目被导入到一个新的Access2016 accdb文件中。最初我认为这是应用程序代码的问题,但我是直接将这个键控记录放入表中。有趣的是,记录总是被写下来的——似乎是回读触发了错误。对插入的SQL进行分析,并从SQL Management Studio运行它,没有任何问题。

    导致问题的表有一个guid主键。切换到int列解决了这个问题。

    SQL数据库中还有几千个扩展属性,我在切换pk之前删除了它们。有来自网络的强烈建议,这些都会导致问题。该过程的来源记录在这里: Remove All SQL Extended Properties

        5
  •  1
  •   Jim    7 年前

    我在尝试更新一个与ODBC链接的SQL Server数据库时遇到了这个问题。问题是用于联接两个表的字段中有一个空值。消除空值解决了这个问题

        6
  •  0
  •   Ricardo Sanchez    15 年前

    仅基于您上面提供的消息,您似乎正在尝试为某些字段或参数等设置无效值…消息告诉您它正在尝试将值转换为特定的数据类型,但该值对于该数据类型无效…有道理吗?

    请添加更多详细信息,以便我们更好地帮助您。

        7
  •  0
  •   Allen    6 年前

    好吧,我只是有过这种不好的经历,它与pk或任何这些东西都无关。 在我的情况下。 在Access中报告此问题的视图最初是在SQL Server中创建的,并使用日期时间强制转换来清除不需要的时间部分。到今天为止,这个视图在访问中已经引起了0个问题,但正如上面所描述的那样,它开始产生烧心。

    因此,我为mss视图生成了一个drop/create脚本,运行它,重新链接了access中的视图,access数据库对结果很满意。我在Access中所有所谓的表基本上都是通过链接到MSS进行报告的视图。我只有一张表可以更改。除此之外,我不通过Access中的视图进行编辑。

    这条信息当然和往常一样没用,但这是我在这种情况下的解决方案。