|
今天在调试几年前帮客户写的远程数据同步程序(mysql ODBC与sql server数据库同步)
在ACCESS程序同步过程中,偶尔会出现以下错误, 找了很多资源和方法,终于解决,与大家分享一下,希望有同样问题的网友可参考.
远程数据同步出现 多步 OLE DB 操作生成错误 如果可用,请检查每个 OLE DB 的状态值。没有工作被完成错误的英文提示是: 2147217887;Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done
一. 开始使用微软的解决办法 (可能对某些情况有用)
此错误有两个可能的原因如下:- 在注册表中,用于 OLE DB 提供程序的 CLSID 项下都可能有一个名为 OLEDB_SERVICES 的条目。如果用于创建 ADO 连接的 OLE DB 提供程序没有 OLEDB_SERVICES 的项时,ADO 尝试设置提供程序不支持的属性,将发生此错误。有关此注册表项的详细信息,请参阅"解决方案"一节。
- 是否存在 OLEDB_SERVICES 项,但在 ADO 连接字符串时出现问题,则将发生此错误。
如果将 OLEDB_SERVICES 注册表项不存在,可以设置一个属性调用直接给提供程序。如果提供程序不支持该属性,则所进行的 ADO SetProperties OLE DB 调用将失败。如果建立连接所需的属性,这将会是致命的失败。如果在连接字符串中显式包含该属性,则可能需要。
如果该属性设置是可选的失败不是致命的。这是这种情况,当您连接而无需显式设置连接字符串中的属性。在这种情况下,ADO 将该属性设置为 True,但会将其标记为可选。
若要变通解决此问题,请使用下列方法之一:- 在 ADO 连接字符串中不使用"持续安全信息"关键字。
- 添加 OLEDB_SERVICES 注册表项,如下所示:
注意只支持 COM 聚合提供程序的注册表项中创建的 OLEDB_SERVICES 值。Exchange OLE DB 提供程序不支持 COM 聚合,并创建此值时,您会收到以下错误消息:0x80040E22
指定非空值控制 IUnknown,而请求的接口不是 IUnknown,或提供程序不支持 COM 聚合。
重要此部分、 方法或任务包含一些介绍如何修改注册表的步骤。但是,如果不正确地修改了注册表,可能会出现严重的问题。因此,请确保仔细按照下列步骤操作。为增加保护,对其进行修改之前备份注册表。然后,您可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:322756如何在 Windows 中备份和还原注册表
- 启动注册表编辑器。
- 在 HKEY_CLASSES_ROOT\CLSID 注册表,找到的 OLE DB 提供程序的 CLSID。例如,下面的注册表项是 Microsoft OLE DB 提供程序用于 SQL Server (SQLOLEDB):HKEY_CLASSES_ROOT\CLSID\ {0C7FF16C-38E3-11d0-97AB-00C04FC2AD98}
单击 CLSID,然后单击编辑菜单上的添加值并添加下列注册表值:值名称: OLEDB_SERVICES
数据类型: REG_DWORD
值: 0xFFFFFFFF
注意若要查找所使用的提供程序的 CLSID,搜索 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ 在注册表中提供程序的进程 Id (例如,SQLOLEDB)。ProgID 下, 有一个键名为 CLSID。
- 如果满足这些条件,并且您仍然收到错误消息,请检查您的连接字符串的其他可能的错误。
二.我的情况使用这种办法解决的
原来是mysql有一个字段 数字值 挺大,例如 99999999.999, 而我的sql server是使用 decimal 数据类型 9 ,导致容纳不下
就提示这个错误 , 只要程序在插入前进行相关的判断及转换 ,就可以了
来自群组: Access粉丝团 |
|