Wenn's "professionell" sein soll, dann muss man die Businesslogik extrahieren und entsprechend abbilden.
Wenn man viele Anweisung hat, die mehr als einen Punkt enthalten, dann müssen die Alarmglocken klingeln:
Delphi-Quellcode:
procedure TfrmXXX.ZeileDelExecute(Sender: TObject);
begin
// wir befinden uns in der Klasse TfrmXXX
// und trotzdem greifen wir immer wieder auf die internen Dinge des Datenmoduls
// TdmXXX zu
dmXXX.qGETFertigteileeingang.ParamByName('AZID').AsInteger := dmXXX.AZQ.fieldbyname('AZ.ID').asinteger;
// und hier schon wieder - 2. Punkte in einer Anweisung
// das "stinkt"
dmXXX.qGETFertigteileeingang.Open;
Also es ist klar, der Code zum Auslesen der Anzahl der Fertigteile gehört in das Datenmodul
Delphi-Quellcode:
function TdmXXX.GetFertigteileAnzahl(azid : Integer):integer;
begin
qGETFertigteileeingang.ParamByName('AZID').AsInteger := azid;
qGETFertigteileeingang.Open;
result := qGETFertigteileeingang.FieldByName('Anzahl').AsInteger;
qGETFertigteileeingang.close;
end;
Und jetzt zum 2. Problem:
Es wird MessageDlg() verwendet wo eigentlich eine
Exception ausgelöst werden sollte:
Delphi-Quellcode:
procedure TfrmXXX.ZeileDelExecute(Sender: TObject);
var
anzahl : Integer;
azid : Integer;
begin
azid := dmXXX.AZQ.fieldbyname('
AZ.ID').asinteger;
anzahl := dmXXX.GetFertigteileAnzahl(azid);
if (anzahl > 0)
then
// Exception auslösen und dem Benutzer möglichst genaue Info geben wo das Problem ist
raise Exception.CreateFmt('
Löschen der Auftragszeile NICHT möglich, da bereits %d Fertigteile daraus eingebucht wurden (azid=%d)', [anzahl, azid]);