为什么#Deleted来自链接表的记录?

时间:2016-06-15 15:56:50

标签: sql-server tsql ms-access access-vba

我的表位于SQL Server上,如下所示。将唯一约束添加到表中时,Access数据条目表单在刚刚输入的记录的所有字段中显示#Deleted。我可以通过重新查询和强制新记录来解决这个问题。每个用户通常只有1-3个记录。

Requery
DoCmd.GoToRecord , , acNewRec

Data Entry Form

为什么添加Unique Constraint会干扰Access表单?表单工作正常,没有唯一约束。

CREATE TABLE [dbo].[tbl_INV_cust_inv_us_temp] (
  [inv_loc]          [char](3)          NOT NULL,
  [inv_no]           [char](7)          NOT NULL,
  [std_GUID]         [uniqueidentifier] NOT NULL,
  [std_NewRecordInd] [bit]              NOT NULL,
  [std_Create_TS]    [datetime]         NOT NULL,
  [std_Create_ID]    [varchar](50)      NOT NULL
); 
GO

ALTER TABLE [dbo].[tbl_INV_cust_inv_us_temp] 
  ADD CONSTRAINT [DF_tbl_INV_cust_inv_us_temp_std_GUID]  
  DEFAULT (newid()) FOR [std_GUID];
GO

ALTER TABLE [dbo].[tbl_INV_cust_inv_us_temp] 
  ADD CONSTRAINT [DF_tbl_INV_cust_inv_us_temp_std_NewRecordInd]  
  DEFAULT (1) FOR [std_NewRecordInd];
GO  

ALTER TABLE [dbo].[tbl_INV_cust_inv_us_temp] 
  ADD CONSTRAINT [DF_tbl_INV_cust_inv_us_temp_std_Create_TS]  
  DEFAULT (getdate()) FOR [std_Create_TS];
GO

ALTER TABLE [dbo].[tbl_INV_cust_inv_us_temp] 
  ADD CONSTRAINT [DF_tbl_INV_cust_inv_us_temp_std_Create_ID]  
  DEFAULT (right(suser_sname(),(len(suser_sname()) - 9))) FOR [std_Create_ID];
GO

ALTER TABLE [dbo].[tbl_INV_cust_inv_us_temp] 
  ADD CONSTRAINT [IX_tbl_INV_cust_inv_us_temp] 
  UNIQUE NONCLUSTERED (
    [inv_loc] ASC,
    [inv_no] ASC,
    [std_Create_ID] ASC) 
  WITH (
    PAD_INDEX  = OFF, 
    STATISTICS_NORECOMPUTE  = OFF, 
    IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS  = ON, 
    ALLOW_PAGE_LOCKS  = ON )
  ON [PRIMARY];
GO  

1 个答案:

答案 0 :(得分:0)

this article,表中的唯一字段是"键" Access用于通过ODBC连接检索和更新记录。

具体来说,您的问题与std_Create_ID有关。使用suser_sname()函数在后端创建std_Create_ID的默认值。所以,来自Access'透视,std_Create_ID字段在创建记录时是空字符串(或者可能为null),因此唯一键是[inv_loc],[inv_no]和空字符串(或者可能为null)的组合。但是,一旦创建了记录,这三个变量的组合就不再存在,因此根据文章假定记录已被删除。

根据文章和您在此处执行操作的方式,可以使用您当前的设置修复此问题。你说你继承了所有这些,所以我不确定你能改变什么。但是,我看到了几个选项:

  1. 继续您的解决方法(即重新查询)
  2. 在Access中构建std_Create_ID(可能不可能)。
  3. 从表格上的唯一约束中删除std_Create_ID。
  4. 我希望这会有所帮助。