(转)MDB链接SQLSERVER导致写入冲突,头疼的问题,原来错在这里!!
2013-01-07 16:41
281 查看
完整提示为:
写入冲突
从您开始编辑此记录以来,该记录已被另一用户更改。如果现在
保存记录,将会覆盖其他用户所做的更改。
将更改内容复制到剪贴板上可以让您看到其他用户输入的值,当
您决定要修改时,可再将剪贴板上的更改内容粘贴回来。
图片如下:
而且只要用 ACCESS 界面修改就会永远有这个提示,永远无法解决。
表的结构为
后来又发现了如果在 SQL SERVER 中定义字段为“货币”,然后随便输入一些值,在 ODBC 链接到 ACCESS 以后也无法正常显示。软件版本为 WINDOWS 2003 SP2 英文版+SQL SERVER 2000 英文版+ACCESS 2003简体中文版
回答:
写入冲突
从您开始编辑此记录以来,该记录已被另一用户更改。如果现在
保存记录,将会覆盖其他用户所做的更改。
将更改内容复制到剪贴板上可以让您看到其他用户输入的值,当
您决定要修改时,可再将剪贴板上的更改内容粘贴回来。
图片如下:
而且只要用 ACCESS 界面修改就会永远有这个提示,永远无法解决。
表的结构为
/****** Object: Table [dbo].[cg_LimitDetail] Script Date: 2008-9-21 19:59:34 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cg_LimitDetail]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[cg_LimitDetail] GO /****** Object: Table [dbo].[cg_LimitDetail] Script Date: 2008-9-21 19:59:34 ******/ Create TABLE [dbo].[cg_LimitDetail] ( [id] [int] IDENTITY (1, 1) NOT NULL , [LimitGroupId] [int] NULL , [LimitConst] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [LimitValue] [bit] NULL ) ON [PRIMARY] GO Alter TABLE [dbo].[cg_LimitDetail] WITH NOCHECK ADD CONSTRAINT [PK_cg_LimitDetail] PRIMARY KEY CLUSTERED ( [id] ) ON [PRIMARY] GO |
回答:
一开始百思不得其解,但是仔细一看发现,其中一个字段是 bit(SQL Server) 也就是 ACCESS 的 Yes/No。这个数据类型在 ACCESS 与 SQL SERVER 中是不一样的。ACCESS 中 TRUE 是 -1 ,而 SQL SERVER 中 TRUE 是1,需要转换的。问题就出在这里,我实际在修改字段时并没有指定值,但是 ACCESS 自动将其设置为 0 ,也就是 FALSE 。但是用 SQL SERVER 事件探查器查出来可就不同了: exec sp_executesql N'Update "dbo"."cg_LimitDetail" SET "LimitConst"=@P1 Where "id" = @P2 AND "LimitGroupId" = @P3 AND "LimitConst" IS NULL AND "LimitValue" = @P4', N'@P1 nvarchar(50),@P2 int,@P3 int,@P4 bit', N'33', 3, 2, 0 大家看到,最后一个参数 @P4 竟然是 0 ,但是实际上在 SQL SERVER 中是 Null 。 终于找到问题了,要解决这个问题可以直接在 SQL SERVER 设计表时直接指定 BIT 字段的默认值为 0。 ACCESS中与SQL SERVER中数据类型不同,有些数据类型在链接表时ACCESS无法自动识别进行转换,也不提示有用的错误信息,所以应该算是个BUG吧。在这种环境下尽量使用不要转换的数据类型,比如长整、双精度之类的数据类型。 微软MVP huanghai先生在直接用ADO绑定窗体数据源时也遇到上述问题,且即使定义默认值也无法解决,最终解决方案是使用长整。 |
相关文章推荐
- MDB链接SQLSERVER导致写入冲突
- 链接库加载,“”(*.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x40B9CA00 时发生访问冲突”的问题所在
- SQLServer通过链接服务器远程删除数据性能问题解决
- 转载:VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- Android中由于ContentProvider导致的“应用组件的命名与已安装应用有冲突”问题
- wdk和vs2010冲突导致静态编译不同过问题
- 照着MSDN用Bitmap,居然还是没用明白,原来问题在这里....
- 字符串逆序问题(解决方案)——及写入位置时发生访问冲突
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- mysql数据库由于启用dns逆向解析导致数据库链接查询过慢的问题
- 域问题导致配置用户不能链接数据库
- ArcGIS mdb数据库写入失败问题
- 因为错误消息指示这是由于上一个问题导致的错误,没有写入 apport 报告。
- 关于sqlserver 链接服务器 asni nulls 和ansiwarnings设置的问题
- docker - 由于docker swarm子网与host机器网络冲突导致的container通信问题的解决方案
- php fwrite写入文件bom头导致的乱码问题解决
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析
- SQLServer 2012之AlwaysOn —— 指定数据同步链路,消除网络抖动导致的提交延迟问题
- MSVC与CRT默认库链接冲突问题
- 注册表不能写入导致不能安装office问题分析