AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Daten aus der Detailtabelle löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Daten aus der Detailtabelle löschen

Ein Thema von BBoy · begonnen am 1. Jun 2011 · letzter Beitrag vom 3. Jun 2011
Antwort Antwort
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

AW: Daten aus der Detailtabelle löschen

  Alt 3. Jun 2011, 09:13
Du solltest das so machen, wie ich im Betrag #3 gezeigt habe; mit einer eigenen Methode.
Ausserdem solltest du eine eigene Query nur zu dem Zweck des Löschens vorhalten:
Dein Problem ist, dass du die Query TdbQuery1 einerseits zum Anzeigen und andererseits zum Löschen verwenden willst.
Delphi-Quellcode:
// Lösche in Tabelle Logs alle Datensätze die den gccode haben
procedure TForm1.DeleteLogs(const gccode:string);
begin
  QueryDelLogs.SQL.Text := 'delete from logs where gccode='+QuotedStr(gccode);
  QueryDelLogs.ExecSQL;
end;
Andreas
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#2

AW: Daten aus der Detailtabelle löschen

  Alt 3. Jun 2011, 09:23
Delphi-Quellcode:
// Lösche in Tabelle Logs alle Datensätze die den gccode haben
procedure TForm1.DeleteLogs(const gccode:string);
begin
  QueryDelLogs.SQL.Text := 'delete from logs where gccode='+QuotedStr(gccode);
  QueryDelLogs.ExecSQL;
end;
Dann aber bitte gleich mit Parametern
Delphi-Quellcode:
// Lösche in Tabelle Logs alle Datensätze die den gccode haben
procedure TForm1.DeleteLogs(const gccode:string);
begin
  QueryDelLogs.SQL.Text := 'delete from logs where gccode = :gccode';
  QueryDelLogs.ParamByName('gccode').AsString := gccode;
  QueryDelLogs.ExecSQL;
end;
Das hat den Vorteil, dass SQL-Injection direkt erledigt ist, außerdem muss man sich um keinster Weise um Datum-Formatierungskram kümmern, weil man direkt den Parameter.AsDateTime setzen kann
Außerdem ergeben sich bei einigen DBMS auch Performance-Vorteile, wenn das Statement nur oft genug ausgeführt wird
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Daten aus der Detailtabelle löschen

  Alt 3. Jun 2011, 09:37
Danke für den neuen code, der ist wohl besser. Aber der Fehler kommt immer noch.

Wenn ich diese Anweisung: delete from logs where GCCode='GC1XZ2Q'
direkt in den sql editor der DB eingebe kommt ebenfalls eine Fehlermeldung in der die Anweisung wiederholt wird. mehr nicht.

Ich habe eine Datenbank mit 3 Tabellen, Tour, Logs und Wpts
Das Query ist mit der DB und der Datasource verbunden.

Diese Anweisung wird ordnungsgemäß ausgeführt: select GCCode from logs

Warum dann die Fehlermeldung bei Delete?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: Daten aus der Detailtabelle löschen

  Alt 3. Jun 2011, 09:49
Wenn ich diese Anweisung: delete from logs where GCCode='GC1XZ2Q'
direkt in den sql editor der DB eingebe kommt ebenfalls eine Fehlermeldung in der die Anweisung wiederholt wird. mehr nicht.
Benutzt du den QutodedSttring dabei oder wie das heißt? Falls nicht musst du auch

='delete from logs where GCCode=''GC1XZ2Q'''

schreiben oder halt noch besser mit Parametern arbeiten.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#5

AW: Daten aus der Detailtabelle löschen

  Alt 3. Jun 2011, 10:13
Welche Fehlermeldung kommt denn überhaupt? Dass der Datensatz nicht gelöscht werden kann? In dem Fall musst Du zuerst die abhängigen Detaildaten löschen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#6

AW: Daten aus der Detailtabelle löschen

  Alt 3. Jun 2011, 11:23
Wenn ich diese Anweisung: delete from logs where GCCode='GC1XZ2Q'
direkt in den sql editor der DB eingebe kommt ebenfalls eine Fehlermeldung in der die Anweisung wiederholt wird. mehr nicht.
Benutzt du den QutodedSttring dabei oder wie das heißt? Falls nicht musst du auch
='delete from logs where GCCode=''GC1XZ2Q'''
schreiben oder halt noch besser mit Parametern arbeiten.
Das gebe ich so direkt als SQL anweisung in der Datenbank ein, da kann man die ' direkt machen.
Zitat:
Welche Fehlermeldung kommt denn überhaupt? Dass der Datensatz nicht gelöscht werden kann? In dem Fall musst Du zuerst die abhängigen Detaildaten löschen.
Es kommt ein Fenster "FEHLER: delete from logs where GCCode='GC1XZ2Q'" aber kein Hinweis was für ein Fehler.

Hier meine DB Struktur:
1 Datenbank mit 3 Tabellen:
(1) DataSource1 > TourTable = Mastertable
(2) DataSource2 > LogTable = Detailtable > MasterSource=DataSource1 MasterFields GcCode
(3) DataSource3 > WPtsTable = Detailtable > MasterSource=DataSource1 MasterFields GcCode

Die Datenbank ist Aktiv und alle Tabellen ebenfalls.
Wenn ich in TourTable einen Datensatz in einem DBGrid auswähle werden automatisch alle entsprechenden Datensätze in den beiden Detailtables selektiert.
Und eben genau dann möchte ich im Mastertable den Datensatz löschen mit den dazugehörigen Datensätzen in beiden Detailtables. Klar versuche ich erst die DEtailtables zu löschen und erst dann den Datensatz im Mastertable.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Daten aus der Detailtabelle löschen

  Alt 3. Jun 2011, 11:44
[QUOTE=BBoy;1104414]
Das gebe ich so direkt als SQL anweisung in der Datenbank ein, da kann man die ' direkt machen.
[QUOTE]

D.h. also: "Select * From logs where GCCode='GC1XZ2Q'" funktioniert?

Vllt. ist was mit den Rechten?
Ralph
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: Daten aus der Detailtabelle löschen

  Alt 3. Jun 2011, 12:13
ok komischerweise funktioniert das nun alles.

Danke für eure Hilfe.

Gibt es eine möglichkeit im code zu prüfen ob das löschen erfolgreich war nachdem ich TdbQuery1.ExecSQL; ausgeführt habe?

Geändert von BBoy ( 3. Jun 2011 um 12:28 Uhr)
  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 11:27 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