|
| 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
| |
|
|