Einzelnen Beitrag anzeigen

Ferber

Registriert seit: 9. Mär 2005
Ort: Wien Umgebung
155 Beiträge
 
Delphi 2006 Architect
 
#23

Re: komplexe Berechnungen von abhängigen Datenbankfeldern

  Alt 16. Feb 2006, 11:53
Hi Emilio !
Zitat von Emilio:
Die Meldung "inkompatible Typen Integer und Extended" ist jetzt 2mal da und dazu die Meldung
"Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen."
Dieser Fehler wird durch den übergeordneten Teil deines Programmes ausgelöst.
Auch dort musst Du den Datentyp auf Extended ändern.
Bei grösseren Anwendungen hat es sich sehr bewährt eine eigene Unit für alle Typdeklarationen, GlobalVariable und Konstanten zu erstellen.
Dort könntest Du zB. definieren
Delphi-Quellcode:
type
  TMyFloat:Extended;
und dann weiter
Delphi-Quellcode:
...
var BruttoLVPAlt, MargeEAlt:TMyFloat;
...
soll der Datentyp später geändert werden, muss dies nur an einer Stelle geschehen.

Zu deinem Berechnungsproblem:
Ziemlich komplexe Sache, schlage eine objektorientiertere Lösung vor.
Kapsle die ganze Berechnung in ein Objekt und statte es mit properties aus.
Dadurch vermeidest du auch die enorme Anzahl an Parametern.
Überlege auch, ob es nicht sinnvoll wäre, die Daten in einem Record zusammenzufassen.
Ich denke dass Du auf dem derzeitigen Weg nur schwer weiterkommst.

Edit: Codebeispiel
Delphi-Quellcode:
interface
type
  TMyFloat = Double;

  TBerechnung = class
  private
    FAltEK, FAltBP, FAltVP:TMyFloat;
    FNeuEK, FNeuBP, FNeuVP:TMyFloat;
    //...
    procedure SetNeuBP(const Value: TMyFloat);
    procedure SetNeuEK(const Value: TMyFloat);
    procedure SetNeuVP(const Value: TMyFloat);
    //...
  protected
    procedure Recalculate;
  public
    property AltEK:TMyFloat read FAltEK write FAltEK;
    property AltBP:TMyFloat read FAltBP write FAltBP;
    property AltVP:TMyFloat read FAltVP write FAltVP;
    property NeuEK:TMyFloat read FNeuEK write SetNeuEK;
    property NeuBP:TMyFloat read FNeuBP write SetNeuBP;
    property NeuVP:TMyFloat read FNeuVP write SetNeuVP;
    //...
  end;

implementation

{ TBerechnung }

procedure TBerechnung.Recalculate;
begin
  // hier die Berechnungen durchführen
  // nur die privaten (F...) variablen setzen - nicht die Properties
  // würde sonst unerwünschte Rekursion ergeben, die mit einer
  // Variablen wie zB: Updating abgefangen werden müsste
end;

procedure TBerechnung.SetNeuBP(const Value: TMyFloat);
begin
  if FNeuBP = Value then exit;
  FNeuBP := Value;
  Recalculate;
end;

procedure TBerechnung.SetNeuEK(const Value: TMyFloat);
begin
  if FNeuEK = Value then exit;
  FNeuEK := Value;
  Recalculate;
end;

procedure TBerechnung.SetNeuVP(const Value: TMyFloat);
begin
  if FNeuVP = Value then exit;
  FNeuVP := Value;
  Recalculate;
end;
Du könntest auf diese Art sogar eine Berechnungskomponente erstellen.
Otto
  Mit Zitat antworten Zitat