2009-05-27 8 views
1

Wenn ich in Access arbeite, wenn ich einen Datensatz aus einer Tabelle lösche - wird der entsprechende Datensatz in einer anderen Tabelle ebenfalls gelöscht, wenn er als Eins-zu-Eins-Beziehung definiert wird. Das wäre ein normales Verhalten, wenn ich es auffordere, die referenzielle Integrität durch Bedenken bezüglich Löschungen und Aktualisierungen (wie ich es verstehe) durchzusetzen. Allerdings scheint es auch zu tun, wenn ich die referenzielle Integritäts-Option erzwinge für gelöschte Löschungen oder wenn ich den gesamten Abschnitt über die referenzielle Integrität ebenfalls gelöscht lasse.Löscht in eins-zu-eins-Beziehungen? Normales Verhalten?

Grundsätzlich habe ich eine Tabelle, die eine Liste der Lieferanten ist, die eine Quelle für eine andere Datenbankanwendung ist, die nicht von mir selbst geschrieben wurde. Ich benutze diese Liefertabelle in meiner Anwendung, indem ich die im ersten Programm gespeicherten Informationen um die vom Benutzer im zweiten Programm in einer separaten Tabelle eingegebenen Informationen erweitere - jedoch über eine Eins-zu-Eins-Beziehung (Beziehung unter Verwendung von Primärschlüsseln in beiden) Tabellen).

Ich möchte nicht, dass ein Löschen des sekundären Informationsdatensatzes dazu führt, dass die Daten in der primären Tabelle gelöscht werden - was im ersten Programm zu großen Problemen (gelinde gesagt) führen würde. Gibt es eine Möglichkeit, dies zu tun?

--Edited auf 2009.05.27 @ 1600--

Hier hinzuzufügen, ist der SQL-Skript der Supplier_Master Tabelle aus der ersten Anwendung zu erstellen:

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 

Hier ist der SQL-Skript

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

uns genau sagen, wie Sie die Löschungen tun. Ausführen von SQL ?, Aus einem Formular? Von einer Tabelle/Abfrage, usw. –

Antwort

2

Ja, es ist normales Verhalten. Wenn Ihr Formular auf einer Abfrage basiert, die eine einzelne Eins-zu-Eins-Beziehung enthält und Sie einen "Datensatz" löschen, löscht es Datensätze in beiden Tabellen.

Sie müssen den normalen Löschvorgang unterdrücken und das Löschen manuell über eine benutzerdefinierte Schaltfläche ausführen.

Private Sub Form_Delete(Cancel As Integer) 

    'this cancels all normal deletes' 
    Cancel = True 

End Sub 

Erstellen Sie dann eine Schaltfläche Löschen

Private Sub cmdDelete_Click() 

    Dim oDB as DAO.Database 

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

    Me.Requery 

End Sub 
+0

Anstatt die erste Routine zu codieren, können Sie auch die Formulare Deletions-Eigenschaft zulassen in Nein ändern. –

0

Wie wird SQL Server beteiligt: ​​die tblSupplierInfo Tabelle aus der zweiten Anwendung zu erstellen? Wenn Sie in Access oder SQL Server keine überlappenden Löschvorgänge ausführen, gibt es möglicherweise einen Auslöser?

+0

SQL Server speichert die beteiligten Datenbanken, Microsoft Access wird verwendet, um auf die Tabellen auf dem Server zuzugreifen, tut mir leid, dies nicht in der Frage früher zu stellen. Ich habe keine Trigger auf dem Datenbankserver definiert, also würde ich annehmen, dass ich die Beziehung merkwürdig definiert habe. Ich hatte es als die schreibgeschützte Tabelle auf der rechten Seite der Beziehungsdefinition festgelegt, und nicht auf der linken Seite. Würde das sein, was dieses Verhalten verursacht? –

+0

Bitte stellen Sie die vollständigen Tabellenerstellungsskripts von SQL Server einschließlich der Einschränkungen bereit. –