AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [SQL] on delete cascade
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] on delete cascade

Ein Thema von Luciano · begonnen am 7. Okt 2004 · letzter Beitrag vom 8. Okt 2004
Antwort Antwort
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#1

[SQL] on delete cascade

  Alt 7. Okt 2004, 11:01
Hi

ich habe schon gegoogelt aber nicht wirklich etwas brauchbares gefunden um das zu verstehen...

Hat vielleicht jemand mal Beispiel oder einen Link wie das funktioniert, wenn ich mehrere Tabellen löschen will die in Abhängikeit voneinander sind?

Thx


Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: [SQL] on delete cascade

  Alt 7. Okt 2004, 12:51
Beispiel : Warengruppen und Artikel. Die Artikel haben Warengruppe als Foreign-Key. Ist "ON DELETE CASCADE" definiert und ich lösche eine Warengruppe, so sind automatisch auch alle Artikel, die diese Warengruppe haben gelöscht.

Es können also keine undefinierten Felder entstehen. Natürlich ist äußerste Vorsicht geboten !!! Es gibt auch noch ON UPDATE CASCADE usw.
Gruß
Hansa
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [SQL] on delete cascade

  Alt 7. Okt 2004, 15:05
Hi Hansa,

kannst du mir vielleicht Stück Quelltext zu dem geben was du geschrieben hast?

Wie sollte das denn aussehen? Die Theorie ist mir klar nur die passende Syntax fehlt mir dazu

Thx


Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: [SQL] on delete cascade

  Alt 7. Okt 2004, 19:22
Leider hast du nicht gesagt, welche DB du verwendest. Für IB/FB kann ich dir ein Bsp. geben.

Na gut, hier ist ein IB-Beispiel :

SQL-Code:
/******************************************************************************/
/****              Generated by IBExpert 07.10.2004 20:29:59               ****/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES ISO8859_1;

/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/

CREATE TABLE ART (
    ID INTEGER,
    ID_WG INTEGER,
    NR INTEGER,
    BEZ INTEGER
);

/******************************************************************************/
/****                             Foreign Keys                             ****/
/******************************************************************************/

ALTER TABLE ART ADD CONSTRAINT FK_ART FOREIGN KEY (ID_WG) REFERENCES WG8 (ID) ON DELETE CASCADE;


/******************************************************************************/
/****                              Privileges                              ****/
/******************************************************************************/
Ob dies sich jetzt 1:1 umsetzen läßt ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [SQL] on delete cascade

  Alt 8. Okt 2004, 08:11
Hi Hansa,

ich benutze MS SQL Server 2000 und greife mit ADO darauf zu...

ich muß die "on delete cascade" Anweisung nach dem erstellen der Tabelle, der Tabelle mitgeben?

Ich dachte ich könnte das irgndwann zur Laufzeit machen...
Etwa so...
SQL-Code:
SELECT * FROM TABLE1
WHERE TABLE1_ID = TABLE2_TABLE1_ID
ON DELETE CASCADE

Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: [SQL] on delete cascade

  Alt 8. Okt 2004, 08:58
@Mike:
Ein Delete Cascade hat nichts mit einer Select Anweisung zu tun, damit du das richtig verstehst. Es geht lediglich darum, wenn du einen Masterecord löscht, daß keinen Detailleichen übrig bleiben. Noch ein Beispiel: Eine Firma hat Kunden, und verkauft Artikel... Die Artikel gelangen auf die Rechnung... Somit hast du 3 Tabellen: Kunden, Artikel, Rechnungen.

Jetzt stell dir vor der Kunde X hat bereits 100 mal dort was gekauft, somit existieren hundert Einträge in der Tabelle Rechnungen, die auf den Kunden X verweisen. Was passiert nun, wenn du aus der Tabelle Kunden den Kunden X löschst. Da bietet dir MSSQL prinzipiell 2 Möglichkeiten:
  • Das Löschen des Kunden X wird unterbunden, da noch Rechungen auf den Kunden verweisen
  • Die Rechnungsinformationen werden gleich mitgelöscht: Und das nennt man Cascaded Deleting
Wie der Server agieren soll, legst du nicht bei einem "Delete" fest (und schon gar nicht bei einem Select, da dann eh nichts gelöscht wird), sondern in deinen Tabellendefinitionen von Kunden, Artikel und Rechnungen. Wie das geht, hat Hansa weiter oben ja bereits geschrieben.

PS: Nicht alle DBMS bieten verschachteltes Löschen an, aber MSSQL tuts.
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [SQL] on delete cascade

  Alt 8. Okt 2004, 11:51
Hi Tom

Genau das ist das was ich wissen wollte
Jetzt ist mir das auch klar wie ich das machen muß!
Großen Dank


Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz