Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi functions aufruf (https://www.delphipraxis.net/175134-functions-aufruf.html)

Walter Landwehr 1. Jun 2013 09:50

functions aufruf
 
Hallo,

ich habe folgende function:


Delphi-Quellcode:
function TModul.GetKontoBalance(Anfang, Ende: String):Currency;
var Jahr,i : Integer;
    Kontonummer : String;
begin
  BuchungenQry.Close;
  BuchungenQry.SQL.Clear;
    Kontonummer := EmptyStr;
  for i := 0 to dmMain.Memo1.Lines.Count - 1 do
  begin
     Kontonummer := Kontonummer + '''' + dmMain.Memo1.Lines[i] + '''' + ',';
  end;
  Kontonummer := Copy(Kontonummer, 0, Length(Kontonummer) - 1);[CODE][/CODE]

  BuchungenQry.SQL.Add('SELECT SUM(B.Soll) as SollBetrag, SUM(B.Haben) as HabenBetrag ');
  BuchungenQry.SQL.Add('FROM Konto K INNER JOIN ');
  BuchungenQry.SQL.Add('Buchung B ON B.DVKontonummer = K.DVKontonummer INNER JOIN ');
  BuchungenQry.SQL.Add('Beleg BL ON BL.DVBelegnummer = B.DVBelegnummer ');
  BuchungenQry.SQL.Add('WHERE (BL.Buchungsperiode Between :Anfang and :Ende) ');
  BuchungenQry.SQL.Add(Format('and BL.Belegart in (%s, %s)',[QuotedStr('ER'),QuotedStr('EG')]));
  BuchungenQry.SQL.Add(Format('and K.Kontonummer in (%s) ',[Kontonummer]));
  BuchungenQry.SQL.Add(Format('and B.InfoGegenkonto in (%s, %s)',[QuotedStr('3425'),QuotedStr('3410')]));
  BuchungenQry.Parameters.ParamByName('Anfang').Value := Anfang;
  BuchungenQry.Parameters.ParamByName('Ende').Value := Ende;
  BuchungenQry.Open;
  Result := BuchungenQry.FieldByName('HabenBetrag').AsCurrency - BuchungenQry.FieldByName('SollBetrag').AsCurrency;
  BuchungenQry.Close;
end;
den Aufruf mache ich so:
Delphi-Quellcode:
 Anfang := '01-01-2012';
 Ende := '31-12-2012';
 SuVorjahr.Value := TModul.GetKontoBalance(Anfang, Ende);

es kommt die Meldung:
[DCC Fehler] Einkauf.pas(97): E2076 Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt

Was mache ich hier falsch?

Walter

haentschman 1. Jun 2013 10:10

AW: functions aufruf
 
Moin...
Delphi-Quellcode:
 SuVorjahr.Value := TModul.GetKontoBalance(Anfang, Ende);
Du mußt mit einer Instanz von TModul arbeiten. Diese muß erzeugt sein.
Delphi-Quellcode:
MyModul:= TModul.Create;
.
.
SuVorjahr.Value := MyModul.GetKontoBalance(Anfang, Ende);
Wenn die Funktion eine
Delphi-Quellcode:
class function
wäre würde das funktionieren.

Sir Rufo 1. Jun 2013 10:17

AW: functions aufruf
 
... oder eben als
Delphi-Quellcode:
class function
deklarieren, ist aber bestimmt nicht so gewollt ;)

Walter Landwehr 1. Jun 2013 11:02

AW: functions aufruf
 
Hm vestehe ich nicht ganz.

MyModul:= TModul.Create; Wo wird MyModul deklariert?

DeddyH 1. Jun 2013 11:03

AW: functions aufruf
 
In der aufrufenden Methode:
Delphi-Quellcode:
var
  MyModul: TModul;
begin
  MyModul:= TModul.Create;
  try
    ...
    Anfang := '01-01-2012';
    Ende := '31-12-2012';
    SuVorjahr.Value := MyModul.GetKontoBalance(Anfang, Ende);
  finally
    MyModul.Free;
  end;
end;

Walter Landwehr 1. Jun 2013 11:14

AW: functions aufruf
 
MyModul:= TModul.Create;
Kommt Meldung :
[DCC Fehler] Einkauf.pas(94): E2035 Nicht genügend wirkliche Parameter

Walter Landwehr 1. Jun 2013 11:17

AW: functions aufruf
 
MyModul:= TModul.Create(Self);

so scheint es zu funktionieren.

zunächst mal Danke an alle.

Walter

sx2008 1. Jun 2013 12:17

AW: functions aufruf
 
TModul wird doch sicher ein Datenmodul sein, oder?
Dann hat Delphi automatisch schon eine globale Variable angelegt:
Delphi-Quellcode:
type
TModul = Class(TDataModule)
....
end;

var
  Modul : TModul;  // <===
Wahrscheinlich wird das Datenmodul "Modul" beim Start schon automatisch erzeugt.
Das lässt sich in den Projektoptionen einstellen.

Bei Datenmodulen hat man in der Regel nur eine Instanz.
Daher:
Delphi-Quellcode:
begin
    ...
    Anfang := '01-01-2012';
    Ende := '31-12-2012';
    SuVorjahr.Value := Modul.GetKontoBalance(Anfang, Ende);
end;


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