2009-06-01 38 views
0

这源于之前提出的一个问题 - 关于与表单的写入冲突,但问题似乎源于我可以更新链接表中现有记录的事实一个系统DSN,而不是另一个DSN(不同数据库)提供的另一个链接表 - 允许我首先输入记录,但却阻止我对记录进行任何更改,就像另一个用户更改了我之前的数据一样。在服务器上没有为缺省值定义检查约束,没有触发器,没有视图,没有其他用户访问同一个表。不允许对记录进行更新 - 写入冲突

这两个DSN都设置了IDENTICAL,除了它们打开的默认数据库 - 第一个打开gtdata_test,而第二个DSN打开instkeeper_test。 SQL Server实例上的两个数据库都属于我,我是唯一登录的用户。

我已经测试过这个,并且这个问题发生在表级别(在程序中没有VBA写入,没有任何内容)和手动更新。

如果有帮助,我会在好表中包含CREATE语句,并在其下面包含受影响的表。我希望有人能帮助我,因为我刚刚从创意中走出来。

代码来创建Supplier_Master表gtdata_test

USE [gtdata_test] 
GO 

/****** Object: Table [dbo].[Supplier_Master] Script Date: 05/27/2009 15:58:17 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Supplier_Master](
    [Supplier_Code] [nvarchar](50) NOT NULL, 
    [Supplier_Master_Name] [nvarchar](50) NULL, 
    [Salutation] [nvarchar](50) NULL, 
    [Contact] [nvarchar](50) NULL, 
    [Phone] [nvarchar](50) NULL, 
    [Fax] [nvarchar](50) NULL, 
    [EMail] [nvarchar](50) NULL, 
    [Address] [nvarchar](50) NULL, 
    [City] [nvarchar](50) NULL, 
    [State] [nvarchar](50) NULL, 
    [Zip] [nvarchar](50) NULL, 
    [Country] [nvarchar](50) NULL, 
    [Last_Review] [datetime] NULL, 
    [Last_Rating] [datetime] NULL, 
    [Last_Received] [datetime] NULL, 
    [Last_Reject] [datetime] NULL, 
    [Enabled] [int] NULL, 
    [User1] [nvarchar](50) NULL, 
    [User2] [nvarchar](50) NULL, 
    [SupType] [nvarchar](50) NULL, 
CONSTRAINT [Supplier_Master$PrimaryKey] PRIMARY KEY CLUSTERED 
(
    [Supplier_Code] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$Address$disallow_zero_length] CHECK ((len([Address])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$Address$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$City$disallow_zero_length] CHECK ((len([City])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$City$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$Contact$disallow_zero_length] CHECK ((len([Contact])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$Contact$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$Country$disallow_zero_length] CHECK ((len([Country])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$Country$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$EMail$disallow_zero_length] CHECK ((len([EMail])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$EMail$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$Fax$disallow_zero_length] CHECK ((len([Fax])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$Fax$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$Phone$disallow_zero_length] CHECK ((len([Phone])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$Phone$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$Salutation$disallow_zero_length] CHECK ((len([Salutation])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$Salutation$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$State$disallow_zero_length] CHECK ((len([State])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$State$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$Supplier_Code$disallow_zero_length] CHECK ((len([Supplier_Code])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$Supplier_Code$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$Supplier_Master_Name$disallow_zero_length] CHECK ((len([Supplier_Master_Name])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$Supplier_Master_Name$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$SupType$disallow_zero_length] CHECK ((len([SupType])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$SupType$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$User1$disallow_zero_length] CHECK ((len([User1])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$User1$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$User2$disallow_zero_length] CHECK ((len([User2])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$User2$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] WITH NOCHECK ADD CONSTRAINT [SSMA_CC$Supplier_Master$Zip$disallow_zero_length] CHECK ((len([Zip])>(0))) 
GO 

ALTER TABLE [dbo].[Supplier_Master] CHECK CONSTRAINT [SSMA_CC$Supplier_Master$Zip$disallow_zero_length] 
GO 

ALTER TABLE [dbo].[Supplier_Master] ADD DEFAULT ((0)) FOR [Enabled] 
GO 

代码来创建tblSupplierInfo在instkeeper_test

USE [instkeeper_test] 
GO 

/****** Object: Table [dbo].[tblSupplierInfo] Script Date: 05/27/2009 15:57:30 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[tblSupplierInfo](
    [strSupplierID] [nvarchar](50) NOT NULL, 
    [bolSupAltShipAddyRep] [bit] NULL, 
    [bolSupAltShipAddyCal] [bit] NULL, 
    [bolSupInsistNet30] [bit] NULL, 
    [bolRMARequireRepair] [bit] NULL, 
    [bolRMARequireCalibration] [bit] NULL, 
    [bolSupShipOrCourier] [bit] NULL, 
    [bolSupRequireMSDS] [bit] NULL, 
    [bolSupBlanketPO] [bit] NULL, 
    [bolSupRequirePricing] [bit] NULL, 
    [bolSupBlankPricing] [bit] NULL, 
    [bolSupFaxPOSend] [bit] NULL, 
    [bolAdditionalPaperworkRepair] [bit] NULL, 
    [bolAdditionalPaperworkCalibration] [bit] NULL, 
    [strRMARepairWordage] [nvarchar](100) NULL, 
    [strRMACalibrationWordage] [nvarchar](100) NULL, 
    [intBlanketPO] [int] NULL, 
    [bolUseFedExNumber] [bit] NULL, 
    [strFedExNumber] [nvarchar](150) NULL, 
    [bolUseUPSNumber] [bit] NULL, 
    [strUPSNumber] [nvarchar](150) NULL, 
    [bolSupA2LAAccredited] [bit] NULL, 
    [bolSupFreightAllow] [bit] NULL, 
    [bolSupFreightOnly] [bit] NULL, 
    [bolSupUseMiscNum] [bit] NULL, 
    [strSupMiscFreightNum] [nvarchar](150) NULL, 
CONSTRAINT [tblSupplierInfo$PrimaryKey] PRIMARY KEY CLUSTERED 
(
    [strSupplierID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

代码在instkeeper_test创建tblSupplierNote:

USE [instkeeper_test] 
GO 

/****** Object: Table [dbo].[tblSupplierNote] Script Date: 06/01/2009 12:34:28 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[tblSupplierNote](
    [intSupNoteID] [int] IDENTITY(1,1) NOT NULL, 
    [strSupplierID] [nvarchar](50) NULL, 
    [datDateNoteEntered] [datetime] NULL, 
    [datTimeNoteEntered] [datetime] NULL, 
    [strNoteBy] [nvarchar](255) NULL, 
    [memSupNote] [nvarchar](max) NULL, 
CONSTRAINT [tblSupplierNote$PrimaryKey] PRIMARY KEY CLUSTERED 
(
    [intSupNoteID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[tblSupplierNote] WITH CHECK ADD CONSTRAINT [tblSupplierNote$tblSupplierInfotblSupplierNote] FOREIGN KEY([strSupplierID]) 
REFERENCES [dbo].[tblSupplierInfo] ([strSupplierID]) 
ON UPDATE CASCADE 
ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[tblSupplierNote] CHECK CONSTRAINT [tblSupplierNote$tblSupplierInfotblSupplierNote] 
GO 

只是为了概述 - 我使用第一个DSN开发的应用程序中的任何表都是可读/写的,可以创建,删除和更新记录而不会出现任何问题。使用第二个DSN,我可以将任何表格插入到应用程序中,并写入ONCE。任何进一步的更改都会丢失,并且只要数据表视图中的表中更新了数据,就会出现写入冲突对话框。

软件我使用:

  • 的Microsoft Access 2003
  • 的SQL Server Express 2008
  • 的Windows XP Professional SP3

- 编辑06/03/2009 @1307小时 - -

我发现一个奇怪的问题,当使用是/否复选框和SQL Server wi访问。显然,Access会将NULL解释为否 - 更改该值,但SQL Server不会将NULL解释为位域中的否(在转换中将转换为“是/否”),因此当值不是时会引发写入冲突错误必需的,并且是NULL。解决方案是重新设计表格,以便需要一个值,并为每个以前的Yes/No复选框分配了默认值。这解决了神秘的写入冲突消息,并允许在创建记录后对其进行更改。

回答

2

之间存在访问如何处理是/否复选框值和SQL Server的差异。当翻译是/从访问SQL Server不布尔值,你一定要记得定义一个默认的状态,以及其标记为需要一个答案。否则,你会得到写冲突每一次,它会阻止记录被保存更改,一旦初始值被设置。

1

您是否尝试过删除表格链接并重新创建它们?对链接到的表/视图所做的更改可能会导致它们变为只读,除非将其删除并重新创建,否则无法进行更正。

而且,我链接使用DSN,但随后用Doug Steele's code to convert them to DNS-less connection strings.

+0

我找到了答案 - 我会注意到它在后上方。感谢您尝试新的东西,但可悲的是 - 这不是解决方案的一部分。它原来是靠不住的东西与Access如何处理是/与SQL Server时,这些值没有复选框和空值。 – 2009-06-03 18:05:29

1

我有过类似的“写入冲突”与Access前端到SQL Server时记录包含NULL位数据类型列(S),我注意到你的表中包含,即使你不更新这些列。设置位数据类型列缺省值0和更新与空的bit数据类型列现有的记录为0,有固定的我。