我的表位于SQL Server上,如下所示。将唯一约束添加到表中时,Access数据条目表单在刚刚输入的记录的所有字段中显示#Deleted。我可以通过重新查询和强制新记录来解决这个问题。每个用户通常只有1-3个记录。
Requery
DoCmd.GoToRecord , , acNewRec
为什么添加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
答案 0 :(得分:0)
每this article,表中的唯一字段是"键" Access用于通过ODBC连接检索和更新记录。
具体来说,您的问题与std_Create_ID有关。使用suser_sname()函数在后端创建std_Create_ID的默认值。所以,来自Access'透视,std_Create_ID字段在创建记录时是空字符串(或者可能为null),因此唯一键是[inv_loc],[inv_no]和空字符串(或者可能为null)的组合。但是,一旦创建了记录,这三个变量的组合就不再存在,因此根据文章假定记录已被删除。
根据文章和您在此处执行操作的方式,可以使用您当前的设置修复此问题。你说你继承了所有这些,所以我不确定你能改变什么。但是,我看到了几个选项:
我希望这会有所帮助。