/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Fejl, men hvorfor?
Fra : Ukendt


Dato : 30-03-06 16:06

Hej.

Jeg har nogle problemer med nedenstående kode. Jeg får bl.a. fejlen "Stack
overflow", når jeg prøver at compilere / starte programmet

Er der en af jer kloge, der kan se, hvad der er i vejen.

procedure TdmData.tblForbrugCalcFields(DataSet: TDataSet);
var
I: integer;
SamletTid: real;
begin
SamletTid:= 0;
tblForbrug.First;
tblForbrug.DisableControls;
For i:= 1 to tblForbrug.RecordCount do
begin
SamletTid:= SamletTid + tblForbrug.FieldByName('tblforbrugtid').Value;
tblForbrug.Next;
end;
tblForbrug.First;
tblForbrug.EnableControls;
tblForbrugSamletTid.Value:= SamletTid;
end;



 
 
Harald (30-03-2006)
Kommentar
Fra : Harald


Dato : 30-03-06 16:37

"Michael Sørensen" <ms1 (a) skindbeni . DANMARK> skrev i en meddelelse
news:442bf3bd$0$8100$ba624c82@nntp02.dk.telia.net...
> Hej.
>
> Jeg har nogle problemer med nedenstående kode. Jeg får bl.a. fejlen "Stack
> overflow", når jeg prøver at compilere / starte programmet
>
> Er der en af jer kloge, der kan se, hvad der er i vejen.
>
> procedure TdmData.tblForbrugCalcFields(DataSet: TDataSet);
> var
> I: integer;
> SamletTid: real;
> begin
> SamletTid:= 0;
> tblForbrug.First;
> tblForbrug.DisableControls;
> For i:= 1 to tblForbrug.RecordCount do
> begin
> SamletTid:= SamletTid + tblForbrug.FieldByName('tblforbrugtid').Value;
> tblForbrug.Next;
> end;
> tblForbrug.First;
> tblForbrug.EnableControls;
> tblForbrugSamletTid.Value:= SamletTid;
> end;

Prøv med:
SamletTid:= 0;
tblForbrug.First;
tblForbrug.DisableControls;
while not tblForbrug.EOF do
begin
SamletTid:= SamletTid + tblForbrug.FieldByName('tblforbrugtid').Value;
tblForbrug.Next;
end;
tblForbrug.First;
tblForbrug.EnableControls;
tblForbrugSamletTid.Value:= SamletTid;

/HK



Ukendt (30-03-2006)
Kommentar
Fra : Ukendt


Dato : 30-03-06 16:49

"Harald" <nomail@noname.dk> skrev i en meddelelse
news:442bfb08$0$84014$edfadb0f@dtext01.news.tele.dk...
> "Michael Sørensen" <ms1 (a) skindbeni . DANMARK> skrev i en meddelelse
> news:442bf3bd$0$8100$ba624c82@nntp02.dk.telia.net...
>> Hej.
>>
>> Jeg har nogle problemer med nedenstående kode. Jeg får bl.a. fejlen
>> "Stack overflow", når jeg prøver at compilere / starte programmet
>>
>> Er der en af jer kloge, der kan se, hvad der er i vejen.
>>
>> procedure TdmData.tblForbrugCalcFields(DataSet: TDataSet);
>> var
>> I: integer;
>> SamletTid: real;
>> begin
>> SamletTid:= 0;
>> tblForbrug.First;
>> tblForbrug.DisableControls;
>> For i:= 1 to tblForbrug.RecordCount do
>> begin
>> SamletTid:= SamletTid + tblForbrug.FieldByName('tblforbrugtid').Value;
>> tblForbrug.Next;
>> end;
>> tblForbrug.First;
>> tblForbrug.EnableControls;
>> tblForbrugSamletTid.Value:= SamletTid;
>> end;
>
> Prøv med:
> SamletTid:= 0;
> tblForbrug.First;
> tblForbrug.DisableControls;
> while not tblForbrug.EOF do
> begin
> SamletTid:= SamletTid + tblForbrug.FieldByName('tblforbrugtid').Value;
> tblForbrug.Next;
> end;
> tblForbrug.First;
> tblForbrug.EnableControls;
> tblForbrugSamletTid.Value:= SamletTid;

Hej Harald.

Det giver desværre samme fejl.



Harald (30-03-2006)
Kommentar
Fra : Harald


Dato : 30-03-06 16:53

"Michael Sørensen" <ms1 (a) skindbeni . DANMARK> skrev i en meddelelse
news:442bfdd9$0$11700$ba624c82@nntp02.dk.telia.net...
> "Harald" <nomail@noname.dk> skrev i en meddelelse
> news:442bfb08$0$84014$edfadb0f@dtext01.news.tele.dk...
>> "Michael Sørensen" <ms1 (a) skindbeni . DANMARK> skrev i en meddelelse
>> news:442bf3bd$0$8100$ba624c82@nntp02.dk.telia.net...
>>> Hej.
>>>
>>> Jeg har nogle problemer med nedenstående kode. Jeg får bl.a. fejlen
>>> "Stack overflow", når jeg prøver at compilere / starte programmet
>>>
>>> Er der en af jer kloge, der kan se, hvad der er i vejen.
>>>
>>> procedure TdmData.tblForbrugCalcFields(DataSet: TDataSet);
>>> var
>>> I: integer;
>>> SamletTid: real;
>>> begin
>>> SamletTid:= 0;
>>> tblForbrug.First;
>>> tblForbrug.DisableControls;
>>> For i:= 1 to tblForbrug.RecordCount do
>>> begin
>>> SamletTid:= SamletTid +
>>> tblForbrug.FieldByName('tblforbrugtid').Value;
>>> tblForbrug.Next;
>>> end;
>>> tblForbrug.First;
>>> tblForbrug.EnableControls;
>>> tblForbrugSamletTid.Value:= SamletTid;
>>> end;
>>
>> Prøv med:
>> SamletTid:= 0;
>> tblForbrug.First;
>> tblForbrug.DisableControls;
>> while not tblForbrug.EOF do
>> begin
>> SamletTid:= SamletTid + tblForbrug.FieldByName('tblforbrugtid').Value;
>> tblForbrug.Next;
>> end;
>> tblForbrug.First;
>> tblForbrug.EnableControls;
>> tblForbrugSamletTid.Value:= SamletTid;
>
> Hej Harald.
>
> Det giver desværre samme fejl.

I hvilken linie får du fejlen?

/HK



N/A (30-03-2006)
Kommentar
Fra : N/A


Dato : 30-03-06 17:05



Harald (30-03-2006)
Kommentar
Fra : Harald


Dato : 30-03-06 17:05

"dh8000" <dennishartvigsen@ofir.dk> skrev i en meddelelse
news:442c0008$0$16993$ba624c82@nntp02.dk.telia.net...
> "Harald" <nomail@noname.dk> skrev i en meddelelse

<klip en masse>

> Programmet stopper med farvet tekst og en pil ud for linien
>
> tblForbrug.DisableControls;
> tblForbrug.DisableControls;

Har du prøvet at Trace (Step over med F8), jeg tror det er fordi at din
TdmData.tblForbrugCalcFields procedure bliver kaldt i en uendelig løkke pga.
af noget af din kode i TdmData.tblForbrugCalcFields, men ved at benytte F8
kan du jo finde ud af det.

/HK



Brian Andersen \(www~ (31-03-2006)
Kommentar
Fra : Brian Andersen \(www~


Dato : 31-03-06 07:28

> procedure TdmData.tblForbrugCalcFields(DataSet: TDataSet);
> var
> I: integer;
> SamletTid: real;
> begin
> SamletTid:= 0;
> tblForbrug.First;
> tblForbrug.DisableControls;
> For i:= 1 to tblForbrug.RecordCount do
> begin
> SamletTid:= SamletTid + tblForbrug.FieldByName('tblforbrugtid').Value;
> tblForbrug.Next;
> end;
> tblForbrug.First;
> tblForbrug.EnableControls;
> tblForbrugSamletTid.Value:= SamletTid;
> end;

Du får en stack overflow fordi, at du laver et loop i OnCalcFields metoden,
som er i samme tabel som metoden tilhører. Hver gang du scroll'er videre med
tblForbrug.Next eller kalder tblForbrug.First, så kaldes
tblForbrugCalcFields metoden. Det vil sige, at når tblForbrugCalcFields er
blevet kaldet et utal gange, så får du fejlen stack overflow.

/Brian



Thor (04-04-2006)
Kommentar
Fra : Thor


Dato : 04-04-06 21:36

Lige præcis!

mvh Thor


Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407936
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste