![]() |
Löschen von 1 zu n und 1 zu n
Hallo Leute
das Löschen der ersten 1 zu n Verbindung ist kein Problem aber bei der zweiten da habe ich leider keinen Lösungsansatz vielleicht hat jemand einen Tipp für mich. besten Dank in voraus mfg Tau |
Re: Löschen von 1 zu n und 1 zu n
:gruebel:
Wo genau bist du? Also gedanklich? Bei was für einer Datenbank und was genau hast du damit vor? |
Re: Löschen von 1 zu n und 1 zu n
Hallo Treffnix
Die Daten Bank sollte keine Rolle Spielen mit der AdoQuery ( Where ) Filtere ich mir die Daten und Lösche sie mit einer Schleife bis keine Daten mehr vorhanden sind. mfg Tau |
Re: Löschen von 1 zu n und 1 zu n
Hallo Tau,
ich verstehe auch nur :stupid: Bahnhof. Du kannst die Daten direkt löschen:
SQL-Code:
oder in deiner Vorgehensweise nach dem Löschen die Query schließen. Die neue Bedingung formulieren, die Query wieder öffnen und alle Datensätze löschen u.s.w.
DELETE FROM myTable WHERE ...
|
Re: Löschen von 1 zu n und 1 zu n
Ich fürchte, ich bin immer noch nicht ganz auf deiner Höhe.
Du machst also ein Delete from XY Where ... ? oder wie soll das aussehen? Vielleicht bin ich auch einfach zu doof... :roll: Und was genau passiert wenn du was auch immer versuchst? *edit* Oh, da hab ich aber scheinbar lange getippt. War der Vulkanier schneller... :wink: |
Re: Löschen von 1 zu n und 1 zu n
Hallo MrSpock
Delete kann ich in der AdoQuery nicht ausführen da ich ja keine Daten zurück bekomme sondern nur eine Fehlermeldung. usw. Also wo kann ich bei einer Ado Komponenten einen Delete Befehl absetzen :wall: mfg Tau |
Re: Löschen von 1 zu n und 1 zu n
Das sollte gehen, in dem Du den Aufruf ADOQuery.ExecSQL ausführst!
|
Re: Löschen von 1 zu n und 1 zu n
Hallo Treffnix
Delphi-Quellcode:
with AdoQuery1 do
begin with SQL do begin Clear; Add('SELECT * From Demo1'); Add('WHERE'); Add('TestID LIKE'); Add(#39 + SuchID + '%' + #39); end; Open; end; for Y := 0 to AdoQuery1.RecordCount -1 do begin if AdoQuery1.RecordCount > 0 then AdoQuery1.Delete; AdoQuery1.Next; end; end; mfg Tau |
Re: Löschen von 1 zu n und 1 zu n
Hallo Tau,
nach dem Löschen steht der Datensatzzeiger automatisch auf dem nächsten Satz. Mit
Code:
überspringst du jeden 2. Satz.
if AdoQuery1.RecordCount > 0 then
AdoQuery1.Delete; AdoQuery1.Next; |
Re: Löschen von 1 zu n und 1 zu n
Hallo MrSpock
es werden aber alle Daten gelöscht den ich habe es Überprüft mit RecordCount :-D und es sind keine Daten mehr vorhanden.
Delphi-Quellcode:
mit dieser Anweisung werden auch nur die Daten in einer Tabelle Gelöscht.
DELETE FROM myTable WHERE ...
Ich möchte aber in zwei oder auch mehrere Tabellen Löschen. mfg Tau |
Re: Löschen von 1 zu n und 1 zu n
Hallo Tau,
nein, es werden nicht alle Daten gelöscht, sondern nur die, die die where-Klausel erfüllen. Recordcount macht hier keinen Sinn, weil eine DELETE Query keine Datenmenge zurückliefert, sondern die Daten direkt auf dem Server löscht. Mit einem anschließendem SELECT kannst du das prüfen. |
Re: Löschen von 1 zu n und 1 zu n
Zitat:
Zitat:
Grundsätzlich halte ich den Delete-Befehl jedenfalls sauberer und schneller, als Datensatz für Datensatz abzuklappern. Aber wie gesagt: Wenns klappt is joa alles in Buddha. Klappts denn? :) *edit* Ich bin soooo langsam.... :cry: |
Re: Löschen von 1 zu n und 1 zu n
Aber diesmal hat der Vulkanier nicht aufgepasst.
Zitat:
Zitat:
Sollte ich derjenige sein, der Tau falsch verstanden hat, nehme ich alles zurück und behaupte das Gegenteil :stupid: |
Re: Löschen von 1 zu n und 1 zu n
Hallo MrSpock und Treffnix
es ist trotzdem noch die Frage offen wie kann ich über mehrere Tabellen Löschen die mit einer 1 zu n Verbindung zusammen hängen. mfg Tau |
Re: Löschen von 1 zu n und 1 zu n
Hallo,
wenn du inmehreren Tabellen etwas über ein SQL-Statement löschen möchtest musst du diese Tabellen im Statement mit LeftJoin verbinden. Gruß Tyrael |
Re: Löschen von 1 zu n und 1 zu n
Hallo Tau,
da kommt es jetzt doch auf die Datenbank an. Manche Datenbanken erlauben die "Löschweitergabe" CASCADE als CONSTRAINT im Rahmen der referenziellen Integrität festzulegen. D.h. diese Datenbanken löschen alle über einen Fremdschlüssel verbundenen Daten, wenn der Masterdatensatz gelöscht wird. Wenn das die Datenbank nicht kann, dann machst du es am besten in dem BeforeDelete Ereignis des zu löschenden Mastersatzes. Idealerweise unter Transaktionskontrolle, damit bei einem Fehler alles mit ROLLBACK wieder rückgaängig gemacht werden kann. Beim DeforeDelete Ereignis erstellt du eine weitere Löschquery für die Detailtabelle und stellst über einen Parameter sicher, dass nur die Daten gelöscht werden, die zu dem Masterdatensatz gehören. Bei einem Fehler bricht du die Delete Operation dann ab. |
Re: Löschen von 1 zu n und 1 zu n
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo MrSpock
Sorry, das ich mich erst jetzt melde musste meinen PC neu Installieren? Gibt jedes mal 2 Tage Arbeit Habe es ausprobiert leider mit sehr geringen erfolg. Der wink mit Transaktionskontrolle ist gut, aber leider steht in der Hilfe relativ wenig drin. z.B. über wie viele Tabellen es geht usw. Mit BeforeDelete bekomme ich immer dieselbe Fehlermeldung. Verstehe aber nicht warum? :wall: Habe ein kleines Demo gebastelt könntest du mir bitte einmal anschauen. Besten Dank mgf Tau |
Re: Löschen von 1 zu n und 1 zu n
Hallo Tau,
was mir auf die Schnelle aufgefallen ist, ist dass du vor dem Löschen des Datensatz diesen in den Edit Mode setzt, das ist aber falsch. Du solltest nur myTable.Delete aufrufen und den vorherigen Edit Aufruf löschen. |
Re: Löschen von 1 zu n und 1 zu n
Hallo MrSpock
Danke für denn Tipp mfg Tau |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz