2009-05-27 79 views
1

在Access中工作時,每當我從一個表中刪除一條記錄時 - 它在另一個表中的相應記錄在定義爲一對一關係時也會被刪除。當我告訴它執行關係刪除和更新(我如何理解它)的參照完整性時,這將是正常行爲。但是,當我離開執行參照完整性選項以清除刪除時,或者當我將完整部分的參照完整性也清除時,似乎也會執行此操作。在一對一的關係中刪除?正常行爲?

基本上,我有一個表是一個供應商的列表,它是另一個數據庫應用程序的來源,它不是我自己編寫的。我在我的應用程序中使用這個供應商表,用第二個程序中的用戶輸入的信息在第一個程序中存儲的信息放在一個單獨的表中 - 但是使用一對一關係進行鏈接(兩個主鍵之間的關係表)。

我不想刪除輔助信息記錄,導致刪除主表中的數據 - 這會在第一個程序中引起重大問題(稍微說來)。有沒有辦法做到這一點?

--Edited對2009/5/27添加@ 1600--

下面是SQL腳本,從第一個應用程序創建Supplier_Master表:

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 

下面是SQL腳本從第二個應用程序創建tblSupplierInfo表:

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 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Supplier Name' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tblSupplierInfo', @level2type=N'COLUMN',@level2name=N'strSupplierID' 
GO 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Alternate Shipping Address - Repairs?' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tblSupplierInfo', @level2type=N'COLUMN',@level2name=N'bolSupAltShipAddyRep' 
GO 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Alternate Shipping Address - Calibrations?' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tblSupplierInfo', @level2type=N'COLUMN',@level2name=N'bolSupAltShipAddyCal' 
GO 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Force Net 30 Wordage?' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tblSupplierInfo', @level2type=N'COLUMN',@level2name=N'bolSupInsistNet30' 
GO 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Do repairs require RMAs?' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tblSupplierInfo', @level2type=N'COLUMN',@level2name=N'bolRMARequireRepair' 
GO 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Do calibrations require RMAs?' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tblSupplierInfo', @level2type=N'COLUMN',@level2name=N'bolRMARequireCalibration' 
GO 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Use Courier?' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tblSupplierInfo', @level2type=N'COLUMN',@level2name=N'bolSupShipOrCourier' 
GO 

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Requires MSDS(s)?' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tblSupplierInfo', @level2type=N'COLUMN',@level2name=N'bolSupRequireMSDS' 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolSupAltShipAddyRep] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolSupAltShipAddyCal] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolSupInsistNet30] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolRMARequireRepair] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolRMARequireCalibration] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolSupShipOrCourier] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolSupRequireMSDS] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolSupBlanketPO] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((1)) FOR [bolSupRequirePricing] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolSupBlankPricing] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolSupFaxPOSend] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolAdditionalPaperworkRepair] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolAdditionalPaperworkCalibration] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ('RMA #') FOR [strRMARepairWordage] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ('RMA #') FOR [strRMACalibrationWordage] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [intBlanketPO] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolUseFedExNumber] 
GO 

ALTER TABLE [dbo].[tblSupplierInfo] ADD DEFAULT ((0)) FOR [bolUseUPSNumber] 
GO 
+0

告訴我們你究竟是如何做刪除。執行SQL ?,從表單?從表/查詢等 – 2009-05-27 21:08:49

回答

2

是的,這是正常的行爲。如果您的表單基於包含單一一對一關係的查詢,並且您刪除了「記錄」,則它將刪除這兩個表中的記錄。

您需要禁止正常的刪除過程並通過自定義按鈕手動運行刪除。

Private Sub Form_Delete(Cancel As Integer) 

    'this cancels all normal deletes' 
    Cancel = True 

End Sub 

然後創建一個刪除按鈕

Private Sub cmdDelete_Click() 

    Dim oDB as DAO.Database 

    oDB.Execute "DELETE * FROM tblSupplierInfo WHERE strSupplierID = '" & Me.strSupplierID & "'", dbFailOnError 

    Me.Requery 

End Sub 
0

SQL Server如何參與?如果在Access或SQL Server中沒有級聯刪除,可能是觸發器?

+0

SQL Server正在存儲所涉及的數據庫,正在使用Microsoft Access訪問服務器上的表,抱歉,以前沒有在這個問題中提出這個問題。 我沒有在數據庫服務器上定義的觸發器,所以我會假設我有定義奇怪的關係。我將它設置爲關係定義右側的只讀表,而不是左側。那會是什麼導致這種行爲? – 2009-05-27 20:02:27

+0

請從SQL Server發佈完整的表創建腳本,包括約束。 – 2009-05-27 20:54:13