Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensatz löschen (https://www.delphipraxis.net/12140-datensatz-loeschen.html)

Budda 21. Nov 2003 12:57


Datensatz löschen
 
Hallo,

hab schon das nächste Problem ;)
Ich habe einen Kundentabelle. Zu jedem einzelnen Kunden können aber beispielsweise mehrere Geschenkdatensätze angelegt werden. Diese werden in eine andere Tabelle geschrieben und bekommen die eindeutige ID des Kundendatensatzes mit damit ich sie zuordnen kann. Wenn ich nun den Kundendatensatz lösche, sollten diese zugehörigen Datensätze aus der anderen tabelle auch gelöscht werden. Bisher lösch ich den Datensatz so:
Delphi-Quellcode:
ADOQuery1.Delete;
DBGrid1.Refresh;
So, da wird natürlich nur der Kundendatensatz gelöscht.
Auf die Geschenkdatensätze greife ich mit einem ADOQuery2 zu.
Wie muß ich das ganze erweitern damit das funktioniert?
Hab leider noch nicht so den Plan von Datenbanken.

Gruß
Budda

Sharky 21. Nov 2003 13:02

Re: Datensatz löschen
 
Hai Budda,

ich würde das über einen SQL-Befehl machen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ADOQuery2.Close;
 ADOQuery2.SQL.Text := 'DELETE FROM geschenktabelle WHERE kunden_id = ' + ADOQuery1.FieldByName ('kunden_id').AsString;
 ADOQuery2.ExecSQL;
end;

Budda 21. Nov 2003 13:07

Re: Datensatz löschen
 
*vormkopfschlag*
So einfach hab ich gar nicht erst gedacht ich trottel ^^
Danke dir.

Gruss
Budda

woki 21. Nov 2003 13:10

Re: Datensatz löschen
 
Aber dann zuerst Geschenkdatensätze und dann Daten aus der Kundentabelle löschen, und das ganze am besten in eine Transaktion einbetten, wenn's geht.

Budda 24. Nov 2003 08:52

Re: Datensatz löschen
 
Wenn ich das so mache bekomm ich einen Syntaxfehler bzw. Zugriffsverletzung.

Leuselator 24. Nov 2003 10:23

Re: Datensatz löschen
 
1. Poste mal ein bischen source (Anhängen)
2. ganz wichtiger Aspekt beim Löschen der Geschenkdatensätze:
Delphi-Quellcode:
procedure DeletePresent(idDeleteKunde : Integer);
var TempQuery : TADOQuery;
    idLeuselator : Integer;
begin
  TempQuery := TADOQuery.Create(nil);
  TempQuery.Connection := ADOQuery1.Connection;
  TempQuery.SQL.Add('select idKunden from Kunden where name = ''Leuselator''');
  TempQuery.Open;
  idLeuselator := TempQuery.FieldByName('idKunden').AsInteger;
  TempQuery.Close;
  TempQuery.SQL.Clear;
  TempQuery.SQL.Add('update Geschenke set idKunden = '+IntToStr(idLeuselator));
  TempQuery.SQL.Add('where idKunden = '+IntToStr(idDeleteKunde));
  TempQuery.ExecSQL;
  TempQuery.Free
end;
:-)

Budda 25. Nov 2003 09:23

Re: Datensatz löschen
 
Moin,

hier der Code vom LöschButton:
Delphi-Quellcode:
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'DELETE FROM t_lizenz WHERE KGGUID = ' + ADOQuery1.FieldByName 'GGUID').AsString;
ADOQuery2.ExecSQL;
ADOQuery1.Delete;
DBGrid1.Refresh;

Leuselator 25. Nov 2003 22:10

Re: Datensatz löschen
 
Code:
ADOQuery2.Close;
// ich vermute mal, dass das ID-Feld vom Typ Integer ist, dann würde ich es auch so abrufen
// ausserdem fehlt 'ne Klammer (vielleicht nur hier im posting?)
// das deleten würde ich auch lieber von hand machen (weis immer gern, was abgeht)
ADOQuery2.SQL.Text := 'DELETE FROM t_lizenz WHERE KGGUID = ' + intToStr(ADOQuery1.FieldByName[color=red]([/color]'GGUID').As[color=red]Integer[/color]);
ADOQuery2.ExecSQL;
ADOQuery2.SQL.Text := 'DELETE FROM t_TabelleAusQuery1 WHERE GUID = intToStr(ADOQuery1.FieldByName('GGUID').AsInteger);
ADOQuery1.Close;
ADOQuery2.ExecSQL;
ADOQuery1.Open;
so sollte es funzen...

Budda 26. Nov 2003 07:46

Re: Datensatz löschen
 
Ne, die ID is nen GUID String ;)
Delphi-Quellcode:
  ADOQuery2.SQL.Text := 'DELETE FROM t_lizenz WHERE KGGUID = ' + ADOQuery1.FieldByName('GGUID').AsString;
ADOQuery2.ExecSQL
Wenn ich das nur mit den beiden Zeilen da Probiere kommt der Fehler auch, also Hakts da wohl irgendwo ^^

Budda 26. Nov 2003 12:58

Re: Datensatz löschen
 
So ich habs, so geht es:
Delphi-Quellcode:
  ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add ('delete from t_lizenz where KGGUID like' + QuotedStr ('%' + DBEdit27.Text + '%'));
  ADOQuery2.ExecSQL;
  ADOQuery1.Delete;
  DBGrid1.Refresh;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 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