![]() |
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:
So, da wird natürlich nur der Kundendatensatz gelöscht.
ADOQuery1.Delete;
DBGrid1.Refresh; 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 |
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; |
Re: Datensatz löschen
*vormkopfschlag*
So einfach hab ich gar nicht erst gedacht ich trottel ^^ Danke dir. Gruss Budda |
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.
|
Re: Datensatz löschen
Wenn ich das so mache bekomm ich einen Syntaxfehler bzw. Zugriffsverletzung.
|
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; |
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; |
Re: Datensatz löschen
Code:
so sollte es funzen...
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; |
Re: Datensatz löschen
Ne, die ID is nen GUID String ;)
Delphi-Quellcode:
Wenn ich das nur mit den beiden Zeilen da Probiere kommt der Fehler auch, also Hakts da wohl irgendwo ^^
ADOQuery2.SQL.Text := 'DELETE FROM t_lizenz WHERE KGGUID = ' + ADOQuery1.FieldByName('GGUID').AsString;
ADOQuery2.ExecSQL |
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 09:17 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