äöähmmm...... ok hier: die ist "etwas" lang..
Delphi-Quellcode:
public
function start(anztage:Integer):Double;
und die fkt selbst
Delphi-Quellcode:
function TfmTarifrechner.start(anztage:Integer):Double;
var
ALoger:string;
ACounter, counter, medcounter: integer;
AId, rechn_array:String;
i,j,k:Integer;
preis:Double;
begin
showmessage('sdfsdf');
memo1.Lines.add('start wird ausgeführt...');
dxMediaCount.Active:=False;
dxMEdiaCount.Active:=True;
dxFertigtarife.Active:=False;
dxFertigtarife.Active:=True;
if dmData.ibtMedia.Active=False then dmData.ibtMedia.Active:=True;
dmData.ibtargruppen.First;
for k:=1 to dmData.ibtargruppen.RecordCount do
begin
dmData.ibtMedia.First;
for i:=1 to dmData.ibtMedia.RecordCount do
begin
memo1.lines.add('duchsuche ibtMedia...');
tbTransTemp.First;
medcounter:=0;
for j:=1 to tbTransTemp.RecordCount do
begin
//memo1.Lines.add('Durchsuche tbTranTemp...');
if (tbTransTempMEDIUM_ID.AsInteger=dmData.ibtMediaMED_ID.AsInteger) and
(tbTransTempTARIFGRP_ID.AsInteger=dmData.ibtargruppenTGR_ID.AsInteger) then
begin
medcounter:=medcounter+1;
memo1.Lines.Add('medcounter um 1 erhöht...');
end;
tbTransTemp.Next;
end; //j
if medcounter>0 then
begin
//showmessage('mediunter>1');
dxMediacount.Insert;
dxMediaCountMED_ID.AsInteger:=dmData.ibtMediaMED_ID.AsInteger;
dxMediacountMED_ANZ.AsInteger:=medcounter;
//dxMediaCountMED_NAME.AsString:=dmData.ibtMediaMED_TYPE.AsString;
dxMediaCountTARGRP_ID.AsInteger:=dmData.ibtargruppenTGR_ID.AsInteger;
//dxMediaCountTARGRP_NAME.AsString:=dmData.ibtargruppenTGR_NAME.AsString;
//dxMediaCountTARGRP_COLOR.AsString:=dmData.ibtargruppenTGR_COLOR.AsString;
dxMediaCount.Post;
end;
dmData.ibtMedia.Next; //es wird jetzt gezählt, wieviel und welche medien in tbTrans
//sind. das ergebnis wird in dxMediaCount gespeichert.
end;//for i
dmData.ibtargruppen.next;
end; //for k
memo1.lines.add('soo... anz der medien gezählt.');
if dxMediaCount.Active=False then dxMEdiaCount.Active:=True;
dxMediaCount.First;
// jetzt wird anhand von dxMediaCount geguckt, welche tarife und wie oft reinpassen
// dafür ist die funktion findemaxtarif zuständig. diese ist rekursiv und ist sowieso
//zauberhaft.
for i:=1 to dxMediaCount.RecordCount do
begin
resttage:=anztage;
findemaxtarif(dxMediacountMED_ID.AsInteger, dxMediacountMED_ANZ.AsInteger, dxMediaCountTARGRP_ID.AsInteger, resttage);
dxMediaCount.Next;
end;// for
tbTransTemp.Next;
//end; //for i
//jetzt preise zusammenzählen
preis:=0;
dxFertigtarife.First;
for i:=1 to dxFertigtarife.RecordCount do
begin
preis:=preis+gettarifpreis(dxFertigTarifeTARIF_ID.AsInteger, dxFertigtarifeTARIF_ANZ.AsInteger);
memo1.lines.add('DER PREIS: '+FloatToStr(preis));
dxFertigtarife.Next;
end;
Result:=preis;
end; //ganz ende
Die Formatierung ist nicht ganz sauber, aber ich denke das ist lesbar.
Notiz: nichteinmal showmessage() am Anfang wird ausgeführt...
HOffe konnte damit mehr Unklarheiten beseitigen als aufbauen...
@ SirThornberry
also es tritt ja kein Fehler im allgemeinen sinne auf. ich sehe keine fehlermeldung... es scheint so als ob die fkt ausgeführt wird....
mojo