Beim Löschen eines Satzes der Tabelle_Firma erscheint die Meldung:
Die DELETE-Anweisung verstieß gegen dieCOLU`MN REFERENCE-Einschränkung
'FK_StammdatenII_Tabelle_Firma'. Der Konflikt trat in der DB-Datenbank,
Tabelle 'StammdatenII', Column 'STII_Numer' auf.
Nun habe ich mir gedacht, da schreib ich doch mal einen Trigger, damit die
Datensätze in den verbundenen Tabellen auch wirklich gelöscht werden:
ALTER TRIGGER Loeschen_Firma
ON dbo.Tabelle_Firma
FOR DELETE
AS
declare @ID as INT
Select @ID = F_Schluessel from deleted
Delete Stammdaten where ST_Nummer = @id
Delete StammdatenII where STII_Nummer = @id
Geht trotzdem nicht.
Jetzt komme ich nicht weiter.
Würde mich sehr freuen, wenn mir jemanf helfen könnte.
Gruß
Anja
> Beim Löschen eines Satzes der Tabelle_Firma erscheint die Meldung:
> Die DELETE-Anweisung verstieß gegen dieCOLU`MN REFERENCE-Einschränkung
> 'FK_StammdatenII_Tabelle_Firma'. Der Konflikt trat in der DB-Datenbank,
> Tabelle 'StammdatenII', Column 'STII_Numer' auf.
>
> Nun habe ich mir gedacht, da schreib ich doch mal einen Trigger, damit die
> Datensätze in den verbundenen Tabellen auch wirklich gelöscht werden:
>
> ALTER TRIGGER Loeschen_Firma
> ON dbo.Tabelle_Firma
> FOR DELETE
[...]
> Geht trotzdem nicht.
Kann nicht gehen, weil der Trigger erst dann ausgelöst wird,
wenn wirklich gelöscht wird. - Genau das passiert aber wegen
der Schlüsselverletzung nie.
Lies mal in der SQL-Server-Dokumentation unter ALTER TABLE -
ADD CONSTRAINT nach. Das ON DELETE CASCADE-Attribut dürfte
dein Problem lösen.
Ich würde stattdessen lieber eine Stored Procedure schreiben,
die die Daten löscht. - Das ist IMO flexibler und leichter
nachzuvollziehbar/wartbar.
Gruß
Phil
--
Richtig zitieren im Usenet -> http://got.to/quote
"Philipp Stiefel" <ph...@codekabinett.de> schrieb im Newsbeitrag
news:bdsmb...@pluto.ksw.codekabinett.com...
Wie Du an meinen vielen Fragen siehst, beschäftige ich mich noch nicht sooo
lange mit .adp´s.
Kann ich den Aufruf der Stored Procedure an den Button zum Löschen hängen,
in der Art "beim Klicken" - Aufruf der Stored Procedure ?
Wie würdest Du die Stored Procedure aufbauen ?
Gruß
Anja
>> > Beim Löschen eines Satzes der Tabelle_Firma erscheint die Meldung:
>> > Die DELETE-Anweisung verstieß gegen dieCOLU`MN REFERENCE-Einschränkung
>> > 'FK_StammdatenII_Tabelle_Firma'. Der Konflikt trat in der DB-Datenbank,
>> > Tabelle 'StammdatenII', Column 'STII_Numer' auf.
[...]
>> Ich würde stattdessen lieber eine Stored Procedure schreiben,
>> die die Daten löscht. - Das ist IMO flexibler und leichter
>> nachzuvollziehbar/wartbar.
[...]
>Kann ich den Aufruf der Stored Procedure an den Button zum Löschen hängen,
>in der Art "beim Klicken" - Aufruf der Stored Procedure ?
Ja, im Prinzip schon.
>Wie würdest Du die Stored Procedure aufbauen ?
---------------------------------------------------------------
CREATE PROCEDURE dbo.sp_LoescheDaten (
@Schluessel int
)
AS
BEGIN
SET ROWCOUNT 0
SET NOCOUNT ON
DECLARE @ErrState int
SELECT @ErrState = 0
BEGIN TRANSACTION
DELETE FROM dbo.tblDetail1 WHERE SchluesselFeld = @Schluessel
SELECT @ErrState = @ErrState + @@error
DELETE FROM dbo.tblDetail2 WHERE SchluesselFeld = @Schluessel
SELECT @ErrState = @ErrState + @@error
DELETE FROM dbo.tblMaster WHERE SchluesselFeld = @Schluessel
SELECT @ErrState = @ErrState + @@error
IF @ErrState = 0
COMMIT TRANSACTION
ELSE
BEGIN
ROLLBACK TRANSACTION
RAISERROR('Fehler beim Löschen der Daten!',16,1)
END
SET ROWCOUNT 0
SET NOCOUNT OFF
END
---------------------------------------------------------------
Aufruf in VBA:
Public Sub LoescheDaten (byval lngSchluessel as long)
Currentproject.Connection.Execute "EXEC dbo.sp_LoescheDaten " & lngSchluessel
End sub